{
 "cells": [
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## XGBoost Parameter Tuning for XGBoost Parameter Tuning for Otto Dataset"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## 1. 直接调用xgboost内嵌的cv寻找最佳的参数n_estimators"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 2,
   "metadata": {},
   "outputs": [],
   "source": [
    "from xgboost import XGBClassifier\n",
    "import xgboost as xgb\n",
    "\n",
    "import pandas as pd \n",
    "import numpy as np\n",
    "\n",
    "from sklearn.model_selection import GridSearchCV\n",
    "from sklearn.model_selection import StratifiedKFold\n",
    "\n",
    "from sklearn.metrics import log_loss\n",
    "\n",
    "from matplotlib import pyplot\n",
    "import seaborn as sns\n",
    "%matplotlib inline"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 3,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>bathrooms</th>\n",
       "      <th>bedrooms</th>\n",
       "      <th>price</th>\n",
       "      <th>price_bathrooms</th>\n",
       "      <th>price_bedrooms</th>\n",
       "      <th>room_diff</th>\n",
       "      <th>room_num</th>\n",
       "      <th>Year</th>\n",
       "      <th>Month</th>\n",
       "      <th>Day</th>\n",
       "      <th>...</th>\n",
       "      <th>walk</th>\n",
       "      <th>walls</th>\n",
       "      <th>war</th>\n",
       "      <th>washer</th>\n",
       "      <th>water</th>\n",
       "      <th>wheelchair</th>\n",
       "      <th>wifi</th>\n",
       "      <th>windows</th>\n",
       "      <th>work</th>\n",
       "      <th>interest_level</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>0</th>\n",
       "      <td>1.5</td>\n",
       "      <td>3</td>\n",
       "      <td>3000</td>\n",
       "      <td>1200.0</td>\n",
       "      <td>750.000000</td>\n",
       "      <td>-1.5</td>\n",
       "      <td>4.5</td>\n",
       "      <td>2016</td>\n",
       "      <td>6</td>\n",
       "      <td>24</td>\n",
       "      <td>...</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>1</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>1</th>\n",
       "      <td>1.0</td>\n",
       "      <td>2</td>\n",
       "      <td>5465</td>\n",
       "      <td>2732.5</td>\n",
       "      <td>1821.666667</td>\n",
       "      <td>-1.0</td>\n",
       "      <td>3.0</td>\n",
       "      <td>2016</td>\n",
       "      <td>6</td>\n",
       "      <td>12</td>\n",
       "      <td>...</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>2</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2</th>\n",
       "      <td>1.0</td>\n",
       "      <td>1</td>\n",
       "      <td>2850</td>\n",
       "      <td>1425.0</td>\n",
       "      <td>1425.000000</td>\n",
       "      <td>0.0</td>\n",
       "      <td>2.0</td>\n",
       "      <td>2016</td>\n",
       "      <td>4</td>\n",
       "      <td>17</td>\n",
       "      <td>...</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>3</th>\n",
       "      <td>1.0</td>\n",
       "      <td>1</td>\n",
       "      <td>3275</td>\n",
       "      <td>1637.5</td>\n",
       "      <td>1637.500000</td>\n",
       "      <td>0.0</td>\n",
       "      <td>2.0</td>\n",
       "      <td>2016</td>\n",
       "      <td>4</td>\n",
       "      <td>18</td>\n",
       "      <td>...</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>2</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>4</th>\n",
       "      <td>1.0</td>\n",
       "      <td>4</td>\n",
       "      <td>3350</td>\n",
       "      <td>1675.0</td>\n",
       "      <td>670.000000</td>\n",
       "      <td>-3.0</td>\n",
       "      <td>5.0</td>\n",
       "      <td>2016</td>\n",
       "      <td>4</td>\n",
       "      <td>28</td>\n",
       "      <td>...</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>1</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>2</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "<p>5 rows × 228 columns</p>\n",
       "</div>"
      ],
      "text/plain": [
       "   bathrooms  bedrooms  price  price_bathrooms  price_bedrooms  room_diff  \\\n",
       "0        1.5         3   3000           1200.0      750.000000       -1.5   \n",
       "1        1.0         2   5465           2732.5     1821.666667       -1.0   \n",
       "2        1.0         1   2850           1425.0     1425.000000        0.0   \n",
       "3        1.0         1   3275           1637.5     1637.500000        0.0   \n",
       "4        1.0         4   3350           1675.0      670.000000       -3.0   \n",
       "\n",
       "   room_num  Year  Month  Day       ...        walk  walls  war  washer  \\\n",
       "0       4.5  2016      6   24       ...           0      0    0       0   \n",
       "1       3.0  2016      6   12       ...           0      0    0       0   \n",
       "2       2.0  2016      4   17       ...           0      0    0       0   \n",
       "3       2.0  2016      4   18       ...           0      0    0       0   \n",
       "4       5.0  2016      4   28       ...           0      0    1       0   \n",
       "\n",
       "   water  wheelchair  wifi  windows  work  interest_level  \n",
       "0      0           0     0        0     0               1  \n",
       "1      0           0     0        0     0               2  \n",
       "2      0           0     0        0     0               0  \n",
       "3      0           0     0        0     0               2  \n",
       "4      0           0     0        0     0               2  \n",
       "\n",
       "[5 rows x 228 columns]"
      ]
     },
     "execution_count": 3,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "train = pd.read_csv(\"RentListingInquries_FE_train.csv\")\n",
    "train.head()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 4,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "bathrooms                 0\n",
       "bedrooms                  0\n",
       "price                     0\n",
       "price_bathrooms           0\n",
       "price_bedrooms            0\n",
       "room_diff                 0\n",
       "room_num                  0\n",
       "Year                      0\n",
       "Month                     0\n",
       "Day                       0\n",
       "Wday                      0\n",
       "Yday                      0\n",
       "hour                      0\n",
       "top_10_manager            0\n",
       "top_25_manager            0\n",
       "top_5_manager             0\n",
       "top_50_manager            0\n",
       "top_1_manager             0\n",
       "top_2_manager             0\n",
       "top_15_manager            0\n",
       "top_20_manager            0\n",
       "top_30_manager            0\n",
       "cenroid                   0\n",
       "distance                  0\n",
       "display_address_pred_0    0\n",
       "display_address_pred_1    0\n",
       "display_address_pred_2    0\n",
       "1br                       0\n",
       "24                        0\n",
       "2br                       0\n",
       "                         ..\n",
       "sublet                    0\n",
       "subway                    0\n",
       "super                     0\n",
       "superintendent            0\n",
       "swimming                  0\n",
       "tenant                    0\n",
       "term                      0\n",
       "terrace                   0\n",
       "time                      0\n",
       "tons                      0\n",
       "train                     0\n",
       "true                      0\n",
       "tv                        0\n",
       "unit                      0\n",
       "utilities                 0\n",
       "valet                     0\n",
       "video                     0\n",
       "view                      0\n",
       "views                     0\n",
       "virtual                   0\n",
       "walk                      0\n",
       "walls                     0\n",
       "war                       0\n",
       "washer                    0\n",
       "water                     0\n",
       "wheelchair                0\n",
       "wifi                      0\n",
       "windows                   0\n",
       "work                      0\n",
       "interest_level            0\n",
       "Length: 228, dtype: int64"
      ]
     },
     "execution_count": 4,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "train.isnull().sum()"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## 没有数据缺失"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## interest_level 分布，看看各类样本分布是否均衡"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 5,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<matplotlib.figure.Figure at 0x7ff28dc9ae10>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "sns.countplot(train.interest_level);\n",
    "pyplot.xlabel('interest');\n",
    "pyplot.ylabel('Number of occurrences');"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "不是很均衡"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 6,
   "metadata": {},
   "outputs": [],
   "source": [
    "y_train = train['interest_level']\n",
    "train = train.drop([\"interest_level\"], axis=1)\n",
    "X_train = np.array(train)\n"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 7,
   "metadata": {},
   "outputs": [],
   "source": [
    "kfold = StratifiedKFold(n_splits=5, shuffle=True, random_state=3)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## 默认参数，此时学习率为0.1，比较大，观察弱分类数目的大致范围 （采用默认参数配置，看看模型是过拟合还是欠拟合）"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 8,
   "metadata": {},
   "outputs": [],
   "source": [
    "def modelfit(alg, X_train, y_train, cv_folds=None, early_stopping_rounds=10):\n",
    "    xgb_param = alg.get_xgb_params()\n",
    "    xgb_param['num_class'] = 3\n",
    "    \n",
    "    #直接调用xgboost，而非sklarn的wrapper类\n",
    "    xgtrain = xgb.DMatrix(X_train, label = y_train)\n",
    "        \n",
    "    cvresult = xgb.cv(xgb_param, xgtrain, num_boost_round=alg.get_params()['n_estimators'], folds =cv_folds,\n",
    "             metrics='mlogloss', early_stopping_rounds=early_stopping_rounds)\n",
    "  \n",
    "    cvresult.to_csv('1_nestimators.csv', index_label = 'n_estimators')\n",
    "    \n",
    "    #最佳参数n_estimators\n",
    "    n_estimators = cvresult.shape[0]\n",
    "    \n",
    "    # 采用交叉验证得到的最佳参数n_estimators，训练模型\n",
    "    alg.set_params(n_estimators = n_estimators)\n",
    "    alg.fit(X_train, y_train, eval_metric='mlogloss')\n",
    "        "
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 9,
   "metadata": {},
   "outputs": [],
   "source": [
    "xgb1 = XGBClassifier(\n",
    "        learning_rate =0.1,\n",
    "        n_estimators=1000,  #数值大没关系，cv会自动返回合适的n_estimators\n",
    "        max_depth=5,\n",
    "        min_child_weight=1,\n",
    "        gamma=0,\n",
    "        subsample=0.3,\n",
    "        colsample_bytree=0.8,\n",
    "        colsample_bylevel=0.7,\n",
    "        objective= 'multi:softprob',\n",
    "        seed=3)\n",
    "\n",
    "modelfit(xgb1, X_train, y_train, cv_folds = kfold)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 10,
   "metadata": {},
   "outputs": [
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "/home/guanyu/.local/lib/python3.6/site-packages/ipykernel_launcher.py:1: FutureWarning: from_csv is deprecated. Please use read_csv(...) instead. Note that some of the default arguments are different, so please refer to the documentation for from_csv when changing your function calls\n",
      "  \"\"\"Entry point for launching an IPython kernel.\n"
     ]
    },
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<matplotlib.figure.Figure at 0x7ff28b834e80>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "cvresult = pd.DataFrame.from_csv('1_nestimators.csv')\n",
    "        \n",
    "# plot\n",
    "test_means = cvresult['test-mlogloss-mean']\n",
    "test_stds = cvresult['test-mlogloss-std'] \n",
    "        \n",
    "train_means = cvresult['train-mlogloss-mean']\n",
    "train_stds = cvresult['train-mlogloss-std'] \n",
    "\n",
    "x_axis = range(0, cvresult.shape[0])\n",
    "        \n",
    "pyplot.errorbar(x_axis, test_means, yerr=test_stds ,label='Test')\n",
    "pyplot.errorbar(x_axis, train_means, yerr=train_stds ,label='Train')\n",
    "pyplot.title(\"XGBoost n_estimators vs Log Loss\")\n",
    "pyplot.xlabel( 'n_estimators' )\n",
    "pyplot.ylabel( 'Log Loss' )\n",
    "pyplot.savefig( 'n_estimators4_1.png' )\n",
    "\n",
    "pyplot.show()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 11,
   "metadata": {},
   "outputs": [
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "/home/guanyu/.local/lib/python3.6/site-packages/ipykernel_launcher.py:1: FutureWarning: from_csv is deprecated. Please use read_csv(...) instead. Note that some of the default arguments are different, so please refer to the documentation for from_csv when changing your function calls\n",
      "  \"\"\"Entry point for launching an IPython kernel.\n"
     ]
    },
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<matplotlib.figure.Figure at 0x7ff28b764278>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "cvresult = pd.DataFrame.from_csv('1_nestimators.csv')\n",
    "\n",
    "cvresult = cvresult.iloc[50:]\n",
    "# plot\n",
    "test_means = cvresult['test-mlogloss-mean']\n",
    "test_stds = cvresult['test-mlogloss-std'] \n",
    "        \n",
    "train_means = cvresult['train-mlogloss-mean']\n",
    "train_stds = cvresult['train-mlogloss-std'] \n",
    "\n",
    "x_axis = range(50,cvresult.shape[0]+50)\n",
    "        \n",
    "fig = pyplot.figure(figsize=(10, 10), dpi=100)\n",
    "pyplot.errorbar(x_axis, test_means, yerr=test_stds ,label='Test')\n",
    "pyplot.errorbar(x_axis, train_means, yerr=train_stds ,label='Train')\n",
    "pyplot.title(\"XGBoost n_estimators vs Log Loss\")\n",
    "pyplot.xlabel( 'n_estimators' )\n",
    "pyplot.ylabel( 'Log Loss' )\n",
    "pyplot.savefig( 'n_estimators_detail.png' )\n",
    "\n",
    "pyplot.show()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 11,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "270"
      ]
     },
     "execution_count": 11,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "xgb1.n_estimators"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## 第一轮的最优参数270"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## 第二步：调整树的参数：max_depth & min_child_weight"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 12,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "{'max_depth': range(3, 10, 2), 'min_child_weight': range(1, 6, 2)}"
      ]
     },
     "execution_count": 12,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "max_depth = range(3,10,2)\n",
    "min_child_weight = range(1,6,2)\n",
    "param_test2_1 = dict(max_depth=max_depth, min_child_weight=min_child_weight)\n",
    "param_test2_1"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 13,
   "metadata": {},
   "outputs": [
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "/home/guanyu/.local/lib/python3.6/site-packages/sklearn/model_selection/_search.py:761: DeprecationWarning: The grid_scores_ attribute was deprecated in version 0.18 in favor of the more elaborate cv_results_ attribute. The grid_scores_ attribute will not be available from 0.20\n",
      "  DeprecationWarning)\n"
     ]
    },
    {
     "data": {
      "text/plain": [
       "([mean: -0.59872, std: 0.00306, params: {'max_depth': 3, 'min_child_weight': 1},\n",
       "  mean: -0.59878, std: 0.00317, params: {'max_depth': 3, 'min_child_weight': 3},\n",
       "  mean: -0.59867, std: 0.00277, params: {'max_depth': 3, 'min_child_weight': 5},\n",
       "  mean: -0.58821, std: 0.00459, params: {'max_depth': 5, 'min_child_weight': 1},\n",
       "  mean: -0.58803, std: 0.00426, params: {'max_depth': 5, 'min_child_weight': 3},\n",
       "  mean: -0.58799, std: 0.00428, params: {'max_depth': 5, 'min_child_weight': 5},\n",
       "  mean: -0.59245, std: 0.00537, params: {'max_depth': 7, 'min_child_weight': 1},\n",
       "  mean: -0.59170, std: 0.00433, params: {'max_depth': 7, 'min_child_weight': 3},\n",
       "  mean: -0.58972, std: 0.00499, params: {'max_depth': 7, 'min_child_weight': 5},\n",
       "  mean: -0.61099, std: 0.00463, params: {'max_depth': 9, 'min_child_weight': 1},\n",
       "  mean: -0.60385, std: 0.00330, params: {'max_depth': 9, 'min_child_weight': 3},\n",
       "  mean: -0.59867, std: 0.00373, params: {'max_depth': 9, 'min_child_weight': 5}],\n",
       " {'max_depth': 5, 'min_child_weight': 5},\n",
       " -0.5879911172353999)"
      ]
     },
     "execution_count": 13,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "xgb2_1 = XGBClassifier(\n",
    "        learning_rate =0.1,\n",
    "        n_estimators=270,  #第一轮参数调整得到的n_estimators最优值\n",
    "        max_depth=5,\n",
    "        min_child_weight=1,\n",
    "        gamma=0,\n",
    "        subsample=0.3,\n",
    "        colsample_bytree=0.8,\n",
    "        colsample_bylevel = 0.7,\n",
    "        objective= 'multi:softprob',\n",
    "        seed=3)\n",
    "\n",
    "\n",
    "gsearch2_1 = GridSearchCV(xgb2_1, param_grid = param_test2_1, scoring='neg_log_loss',n_jobs=-1, cv=kfold)\n",
    "gsearch2_1.fit(X_train , y_train)\n",
    "\n",
    "gsearch2_1.grid_scores_, gsearch2_1.best_params_,     gsearch2_1.best_score_"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 14,
   "metadata": {},
   "outputs": [
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "/home/guanyu/.local/lib/python3.6/site-packages/sklearn/utils/deprecation.py:122: FutureWarning: You are accessing a training score ('mean_train_score'), which will not be available by default any more in 0.21. If you need training scores, please set return_train_score=True\n",
      "  warnings.warn(*warn_args, **warn_kwargs)\n",
      "/home/guanyu/.local/lib/python3.6/site-packages/sklearn/utils/deprecation.py:122: FutureWarning: You are accessing a training score ('split0_train_score'), which will not be available by default any more in 0.21. If you need training scores, please set return_train_score=True\n",
      "  warnings.warn(*warn_args, **warn_kwargs)\n",
      "/home/guanyu/.local/lib/python3.6/site-packages/sklearn/utils/deprecation.py:122: FutureWarning: You are accessing a training score ('split1_train_score'), which will not be available by default any more in 0.21. If you need training scores, please set return_train_score=True\n",
      "  warnings.warn(*warn_args, **warn_kwargs)\n",
      "/home/guanyu/.local/lib/python3.6/site-packages/sklearn/utils/deprecation.py:122: FutureWarning: You are accessing a training score ('split2_train_score'), which will not be available by default any more in 0.21. If you need training scores, please set return_train_score=True\n",
      "  warnings.warn(*warn_args, **warn_kwargs)\n",
      "/home/guanyu/.local/lib/python3.6/site-packages/sklearn/utils/deprecation.py:122: FutureWarning: You are accessing a training score ('split3_train_score'), which will not be available by default any more in 0.21. If you need training scores, please set return_train_score=True\n",
      "  warnings.warn(*warn_args, **warn_kwargs)\n",
      "/home/guanyu/.local/lib/python3.6/site-packages/sklearn/utils/deprecation.py:122: FutureWarning: You are accessing a training score ('split4_train_score'), which will not be available by default any more in 0.21. If you need training scores, please set return_train_score=True\n",
      "  warnings.warn(*warn_args, **warn_kwargs)\n",
      "/home/guanyu/.local/lib/python3.6/site-packages/sklearn/utils/deprecation.py:122: FutureWarning: You are accessing a training score ('std_train_score'), which will not be available by default any more in 0.21. If you need training scores, please set return_train_score=True\n",
      "  warnings.warn(*warn_args, **warn_kwargs)\n"
     ]
    },
    {
     "data": {
      "text/plain": [
       "{'mean_fit_time': array([154.21682215, 150.90271931, 151.10579371, 224.32278905,\n",
       "        223.36833401, 222.1181921 , 296.68397732, 295.80019727,\n",
       "        293.364821  , 368.26343193, 363.95987468, 360.34517045]),\n",
       " 'mean_score_time': array([0.60291843, 0.55635996, 0.44134994, 1.04164529, 0.84699674,\n",
       "        0.84645615, 1.54421759, 1.51919484, 1.44507031, 2.96433482,\n",
       "        2.65353985, 2.3735465 ]),\n",
       " 'mean_test_score': array([-0.59871847, -0.59877699, -0.59866501, -0.58820585, -0.5880287 ,\n",
       "        -0.58799112, -0.5924495 , -0.59169536, -0.58972498, -0.61098628,\n",
       "        -0.60385414, -0.59866985]),\n",
       " 'mean_train_score': array([-0.57194389, -0.5726189 , -0.573408  , -0.49711873, -0.50412378,\n",
       "        -0.50819021, -0.38280203, -0.40777342, -0.42188664, -0.25283371,\n",
       "        -0.30061493, -0.33155676]),\n",
       " 'param_max_depth': masked_array(data=[3, 3, 3, 5, 5, 5, 7, 7, 7, 9, 9, 9],\n",
       "              mask=[False, False, False, False, False, False, False, False,\n",
       "                    False, False, False, False],\n",
       "        fill_value='?',\n",
       "             dtype=object),\n",
       " 'param_min_child_weight': masked_array(data=[1, 3, 5, 1, 3, 5, 1, 3, 5, 1, 3, 5],\n",
       "              mask=[False, False, False, False, False, False, False, False,\n",
       "                    False, False, False, False],\n",
       "        fill_value='?',\n",
       "             dtype=object),\n",
       " 'params': [{'max_depth': 3, 'min_child_weight': 1},\n",
       "  {'max_depth': 3, 'min_child_weight': 3},\n",
       "  {'max_depth': 3, 'min_child_weight': 5},\n",
       "  {'max_depth': 5, 'min_child_weight': 1},\n",
       "  {'max_depth': 5, 'min_child_weight': 3},\n",
       "  {'max_depth': 5, 'min_child_weight': 5},\n",
       "  {'max_depth': 7, 'min_child_weight': 1},\n",
       "  {'max_depth': 7, 'min_child_weight': 3},\n",
       "  {'max_depth': 7, 'min_child_weight': 5},\n",
       "  {'max_depth': 9, 'min_child_weight': 1},\n",
       "  {'max_depth': 9, 'min_child_weight': 3},\n",
       "  {'max_depth': 9, 'min_child_weight': 5}],\n",
       " 'rank_test_score': array([ 9, 10,  7,  3,  2,  1,  6,  5,  4, 12, 11,  8], dtype=int32),\n",
       " 'split0_test_score': array([-0.59322149, -0.59356787, -0.59385547, -0.57985236, -0.58013097,\n",
       "        -0.58107966, -0.58251242, -0.58439193, -0.58071658, -0.60325653,\n",
       "        -0.60016446, -0.59356423]),\n",
       " 'split0_train_score': array([-0.5732688 , -0.57425954, -0.57488254, -0.49908782, -0.50615601,\n",
       "        -0.51054751, -0.38291011, -0.40844543, -0.42318593, -0.2553782 ,\n",
       "        -0.30128824, -0.33170093]),\n",
       " 'split1_test_score': array([-0.59803871, -0.5974313 , -0.59786131, -0.5878839 , -0.58717688,\n",
       "        -0.58560198, -0.59226219, -0.58990971, -0.58872232, -0.60816732,\n",
       "        -0.60099695, -0.59649612]),\n",
       " 'split1_train_score': array([-0.57223694, -0.57277531, -0.57347176, -0.49783165, -0.50451992,\n",
       "        -0.50829185, -0.38345543, -0.40878872, -0.4220456 , -0.2515531 ,\n",
       "        -0.29686997, -0.33026672]),\n",
       " 'split2_test_score': array([-0.59954785, -0.599159  , -0.59887866, -0.58917885, -0.58993776,\n",
       "        -0.58911062, -0.59438594, -0.59402247, -0.59105814, -0.61323825,\n",
       "        -0.60549593, -0.60113164]),\n",
       " 'split2_train_score': array([-0.57228741, -0.57270223, -0.57360123, -0.49745869, -0.50352466,\n",
       "        -0.50861477, -0.38338644, -0.40919378, -0.42216144, -0.25424255,\n",
       "        -0.30369939, -0.3332278 ]),\n",
       " 'split3_test_score': array([-0.60219069, -0.60285776, -0.60152237, -0.59048677, -0.59101409,\n",
       "        -0.59077672, -0.59452265, -0.5929426 , -0.59289148, -0.61490288,\n",
       "        -0.60330823, -0.59783001]),\n",
       " 'split3_train_score': array([-0.5706224 , -0.57141443, -0.57249833, -0.4954433 , -0.50398008,\n",
       "        -0.50697957, -0.38195727, -0.4080548 , -0.42254065, -0.25184555,\n",
       "        -0.30029765, -0.33164304]),\n",
       " 'split4_test_score': array([-0.60059419, -0.60086965, -0.601208  , -0.59362905, -0.59188497,\n",
       "        -0.59338824, -0.59856614, -0.59721176, -0.59523807, -0.61536778,\n",
       "        -0.60930678, -0.604329  ]),\n",
       " 'split4_train_score': array([-0.5713039 , -0.57194298, -0.57258615, -0.49577219, -0.50243822,\n",
       "        -0.50651734, -0.38230091, -0.40438436, -0.4194996 , -0.25114914,\n",
       "        -0.30091943, -0.3309453 ]),\n",
       " 'std_fit_time': array([11.07054826,  4.25787306,  2.34101207,  2.45663971,  1.71981234,\n",
       "         0.91060244,  1.65854776,  4.05951052,  2.7938385 ,  1.26065513,\n",
       "         1.98604515,  4.96012822]),\n",
       " 'std_score_time': array([0.17226813, 0.24275377, 0.01372836, 0.35135377, 0.02192209,\n",
       "        0.01789071, 0.03560729, 0.06886078, 0.01407431, 0.38499914,\n",
       "        0.05663246, 0.26534433]),\n",
       " 'std_test_score': array([0.00306409, 0.00316624, 0.00277326, 0.00459222, 0.00425508,\n",
       "        0.00428053, 0.00537102, 0.00433421, 0.00498704, 0.0046326 ,\n",
       "        0.0033014 , 0.00373038]),\n",
       " 'std_train_score': array([0.00090721, 0.00096237, 0.00086239, 0.00135066, 0.00122536,\n",
       "        0.00141503, 0.00059074, 0.00173578, 0.00125814, 0.00166814,\n",
       "        0.00219933, 0.00098577])}"
      ]
     },
     "execution_count": 14,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "gsearch2_1.cv_results_"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 15,
   "metadata": {},
   "outputs": [
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "/home/guanyu/.local/lib/python3.6/site-packages/sklearn/utils/deprecation.py:122: FutureWarning: You are accessing a training score ('mean_train_score'), which will not be available by default any more in 0.21. If you need training scores, please set return_train_score=True\n",
      "  warnings.warn(*warn_args, **warn_kwargs)\n",
      "/home/guanyu/.local/lib/python3.6/site-packages/sklearn/utils/deprecation.py:122: FutureWarning: You are accessing a training score ('std_train_score'), which will not be available by default any more in 0.21. If you need training scores, please set return_train_score=True\n",
      "  warnings.warn(*warn_args, **warn_kwargs)\n",
      "/home/guanyu/.local/lib/python3.6/site-packages/sklearn/utils/deprecation.py:122: FutureWarning: You are accessing a training score ('split0_train_score'), which will not be available by default any more in 0.21. If you need training scores, please set return_train_score=True\n",
      "  warnings.warn(*warn_args, **warn_kwargs)\n",
      "/home/guanyu/.local/lib/python3.6/site-packages/sklearn/utils/deprecation.py:122: FutureWarning: You are accessing a training score ('split1_train_score'), which will not be available by default any more in 0.21. If you need training scores, please set return_train_score=True\n",
      "  warnings.warn(*warn_args, **warn_kwargs)\n",
      "/home/guanyu/.local/lib/python3.6/site-packages/sklearn/utils/deprecation.py:122: FutureWarning: You are accessing a training score ('split2_train_score'), which will not be available by default any more in 0.21. If you need training scores, please set return_train_score=True\n",
      "  warnings.warn(*warn_args, **warn_kwargs)\n",
      "/home/guanyu/.local/lib/python3.6/site-packages/sklearn/utils/deprecation.py:122: FutureWarning: You are accessing a training score ('split3_train_score'), which will not be available by default any more in 0.21. If you need training scores, please set return_train_score=True\n",
      "  warnings.warn(*warn_args, **warn_kwargs)\n",
      "/home/guanyu/.local/lib/python3.6/site-packages/sklearn/utils/deprecation.py:122: FutureWarning: You are accessing a training score ('split4_train_score'), which will not be available by default any more in 0.21. If you need training scores, please set return_train_score=True\n",
      "  warnings.warn(*warn_args, **warn_kwargs)\n"
     ]
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Best: -0.587991 using {'max_depth': 5, 'min_child_weight': 5}\n"
     ]
    },
    {
     "data": {
      "image/png": "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hgwZwpAhQ/jkk08AmDNnDueeey6qyu7du+nTpw979uwJuJ3CwkKmTp3KoEGDmDJlyjHDyJ9xxhkMGTKEyy+/3DsETI8ePZg2bRpDhw5l6NChbN26lU8++YS5c+dy9913k5aWxrfOjetmzZrF0KFD6dOnD8uXL692n3744Yf06tWL7t271/KncHzsHIkJOVdsLMmXXELyJZdQ9PU35M6cyaF33uHwe+8R3asXKVMmk3TxxUQkJYW7VOPn8ZWP89XBr+p1nX3b9GXa0GlVzn/sscfYuHEja9euZeHChcyePZuVK1eiqkyYMIHMzEz2799P586def/99wHP2FhJSUk8+eSTLFmypNpvhlcMI//4448zceJE7zDymzZt4tprr2XChAneYeRjY2PZsmULV1xxBatWrWLixIm8+eabzJgxgwULFtR6GPn169czZMgQoPIw8gkJCTz++OM8+eST3kEnK4aR//e//80dd9zBe++9x4QJE7jooou47LLLvOuvGEZ+3rx5PPjggyxevLjSECm+3njjjWpHKg6WBYlpULEn96Hj739H+9/cyeH588nJmMneR//Evr88Sevx40meMoW4U9OqHfXUtBw2jHxww8hXrH/u3Ln86U9/qnHf1JUFiQkLV3w8yZMmkTxpEkWbN5OTkcHhue9y6J13iOnTh+TJk0m6eAIRrVqFu9QWrbqeQ0OwYeSDG0YeYP78+QwZMoQOIRyJws6RmLCL7dePTn/8I72XZ9LxoQeRqCj2PvwwW0aOYtf991O4fr2dS2lBbBj5+hlGvsLrr78e0sNaYD0S04i4EhJImTyZlMmTKdywkdyZGRx6fx6H3nyLmH79SJkymdYX/ZiIxIRwl2pCyIaRr59h5METUosWLeKf//xnnfdFbdhYW6ZRK8/L4/C775KTMZPir75C4uNJuvBCz7mUAf3DXV6zZGNthU9THUbeeiSmUYtITCTliitInjqVovXrycmYyaF33yV31ixiBwwgecpkki64AFeC9VKMCRfrkZgmp/zwYQ69M5fcmRkUb9mKKyGB1hN+TMqUKcT27Rvu8pq85tIjaYrDyIdTMD0SCxLTZKkqhV98QW5GBofnL0BLSogdPIiUKVNpff54XHFx4S6xSWouQWKOj90h0bRIIkL8kCF0fvxxemcuo8O99+A+fITd993HllGj2fPwIxRv2RLuMo1p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\n",
      "text/plain": [
       "<matplotlib.figure.Figure at 0x7ff28b75fdd8>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "print(\"Best: %f using %s\" % (gsearch2_1.best_score_, gsearch2_1.best_params_))\n",
    "test_means = gsearch2_1.cv_results_[ 'mean_test_score' ]\n",
    "test_stds = gsearch2_1.cv_results_[ 'std_test_score' ]\n",
    "train_means = gsearch2_1.cv_results_[ 'mean_train_score' ]\n",
    "train_stds = gsearch2_1.cv_results_[ 'std_train_score' ]\n",
    "\n",
    "pd.DataFrame(gsearch2_1.cv_results_).to_csv('my_preds_maxdepth_min_child_weights_1.csv')\n",
    "\n",
    "# plot results\n",
    "test_scores = np.array(test_means).reshape(len(max_depth), len(min_child_weight))\n",
    "train_scores = np.array(train_means).reshape(len(max_depth), len(min_child_weight))\n",
    "\n",
    "for i, value in enumerate(max_depth):\n",
    "    pyplot.plot(min_child_weight, -test_scores[i], label= 'test_max_depth:'   + str(value))\n",
    "#for i, value in enumerate(min_child_weight):\n",
    "#    pyplot.plot(max_depth, train_scores[i], label= 'train_min_child_weight:'   + str(value))\n",
    "    \n",
    "pyplot.legend()\n",
    "pyplot.xlabel( 'max_depth' )                                                                                                      \n",
    "pyplot.ylabel( 'Log Loss' )\n",
    "pyplot.savefig('max_depth_vs_min_child_weght_1.png' )"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 18,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "{'max_depth': [6, 7, 8], 'min_child_weight': [4, 5, 6]}"
      ]
     },
     "execution_count": 18,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "max_depth = [6,7,8]\n",
    "min_child_weight = [4,5,6]\n",
    "param_test2_2 = dict(max_depth=max_depth, min_child_weight=min_child_weight)\n",
    "param_test2_2"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 19,
   "metadata": {},
   "outputs": [
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "/home/guanyu/.local/lib/python3.6/site-packages/sklearn/model_selection/_search.py:761: DeprecationWarning: The grid_scores_ attribute was deprecated in version 0.18 in favor of the more elaborate cv_results_ attribute. The grid_scores_ attribute will not be available from 0.20\n",
      "  DeprecationWarning)\n"
     ]
    },
    {
     "data": {
      "text/plain": [
       "([mean: -0.58840, std: 0.00419, params: {'max_depth': 6, 'min_child_weight': 4},\n",
       "  mean: -0.58813, std: 0.00346, params: {'max_depth': 6, 'min_child_weight': 5},\n",
       "  mean: -0.58834, std: 0.00404, params: {'max_depth': 6, 'min_child_weight': 6},\n",
       "  mean: -0.59042, std: 0.00400, params: {'max_depth': 7, 'min_child_weight': 4},\n",
       "  mean: -0.58972, std: 0.00499, params: {'max_depth': 7, 'min_child_weight': 5},\n",
       "  mean: -0.58944, std: 0.00458, params: {'max_depth': 7, 'min_child_weight': 6},\n",
       "  mean: -0.59557, std: 0.00381, params: {'max_depth': 8, 'min_child_weight': 4},\n",
       "  mean: -0.59450, std: 0.00606, params: {'max_depth': 8, 'min_child_weight': 5},\n",
       "  mean: -0.59515, std: 0.00425, params: {'max_depth': 8, 'min_child_weight': 6}],\n",
       " {'max_depth': 6, 'min_child_weight': 5},\n",
       " -0.5881329737630143)"
      ]
     },
     "execution_count": 19,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "xgb2_2 = XGBClassifier(\n",
    "        learning_rate =0.1,\n",
    "        n_estimators=270,  #第一轮参数调整得到的n_estimators最优值\n",
    "        max_depth=5,\n",
    "        min_child_weight=1,\n",
    "        gamma=0,\n",
    "        subsample=0.3,\n",
    "        colsample_bytree=0.8,\n",
    "        colsample_bylevel = 0.7,\n",
    "        objective= 'multi:softprob',\n",
    "        seed=3)\n",
    "\n",
    "\n",
    "gsearch2_2 = GridSearchCV(xgb2_2, param_grid = param_test2_2, scoring='neg_log_loss',n_jobs=-1, cv=kfold)\n",
    "gsearch2_2.fit(X_train , y_train)\n",
    "\n",
    "gsearch2_2.grid_scores_, gsearch2_2.best_params_,     gsearch2_2.best_score_"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 20,
   "metadata": {},
   "outputs": [
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "/home/guanyu/.local/lib/python3.6/site-packages/sklearn/utils/deprecation.py:122: FutureWarning: You are accessing a training score ('mean_train_score'), which will not be available by default any more in 0.21. If you need training scores, please set return_train_score=True\n",
      "  warnings.warn(*warn_args, **warn_kwargs)\n",
      "/home/guanyu/.local/lib/python3.6/site-packages/sklearn/utils/deprecation.py:122: FutureWarning: You are accessing a training score ('split0_train_score'), which will not be available by default any more in 0.21. If you need training scores, please set return_train_score=True\n",
      "  warnings.warn(*warn_args, **warn_kwargs)\n",
      "/home/guanyu/.local/lib/python3.6/site-packages/sklearn/utils/deprecation.py:122: FutureWarning: You are accessing a training score ('split1_train_score'), which will not be available by default any more in 0.21. If you need training scores, please set return_train_score=True\n",
      "  warnings.warn(*warn_args, **warn_kwargs)\n",
      "/home/guanyu/.local/lib/python3.6/site-packages/sklearn/utils/deprecation.py:122: FutureWarning: You are accessing a training score ('split2_train_score'), which will not be available by default any more in 0.21. If you need training scores, please set return_train_score=True\n",
      "  warnings.warn(*warn_args, **warn_kwargs)\n",
      "/home/guanyu/.local/lib/python3.6/site-packages/sklearn/utils/deprecation.py:122: FutureWarning: You are accessing a training score ('split3_train_score'), which will not be available by default any more in 0.21. If you need training scores, please set return_train_score=True\n",
      "  warnings.warn(*warn_args, **warn_kwargs)\n",
      "/home/guanyu/.local/lib/python3.6/site-packages/sklearn/utils/deprecation.py:122: FutureWarning: You are accessing a training score ('split4_train_score'), which will not be available by default any more in 0.21. If you need training scores, please set return_train_score=True\n",
      "  warnings.warn(*warn_args, **warn_kwargs)\n",
      "/home/guanyu/.local/lib/python3.6/site-packages/sklearn/utils/deprecation.py:122: FutureWarning: You are accessing a training score ('std_train_score'), which will not be available by default any more in 0.21. If you need training scores, please set return_train_score=True\n",
      "  warnings.warn(*warn_args, **warn_kwargs)\n"
     ]
    },
    {
     "data": {
      "text/plain": [
       "{'mean_fit_time': array([251.58741951, 251.40480709, 263.57650261, 295.94459066,\n",
       "        292.4699399 , 294.76696472, 330.67053151, 328.49058094,\n",
       "        325.13801327]),\n",
       " 'mean_score_time': array([1.10057273, 1.07786508, 1.133321  , 1.4357419 , 1.38863258,\n",
       "        1.38048611, 1.91457834, 1.83374467, 1.73046594]),\n",
       " 'mean_test_score': array([-0.58840089, -0.58813297, -0.58834102, -0.59042485, -0.58972498,\n",
       "        -0.5894419 , -0.59556824, -0.59450112, -0.59514856]),\n",
       " 'mean_train_score': array([-0.46352832, -0.46795091, -0.47064395, -0.41485069, -0.42188664,\n",
       "        -0.42743212, -0.36336705, -0.37481945, -0.38267027]),\n",
       " 'param_max_depth': masked_array(data=[6, 6, 6, 7, 7, 7, 8, 8, 8],\n",
       "              mask=[False, False, False, False, False, False, False, False,\n",
       "                    False],\n",
       "        fill_value='?',\n",
       "             dtype=object),\n",
       " 'param_min_child_weight': masked_array(data=[4, 5, 6, 4, 5, 6, 4, 5, 6],\n",
       "              mask=[False, False, False, False, False, False, False, False,\n",
       "                    False],\n",
       "        fill_value='?',\n",
       "             dtype=object),\n",
       " 'params': [{'max_depth': 6, 'min_child_weight': 4},\n",
       "  {'max_depth': 6, 'min_child_weight': 5},\n",
       "  {'max_depth': 6, 'min_child_weight': 6},\n",
       "  {'max_depth': 7, 'min_child_weight': 4},\n",
       "  {'max_depth': 7, 'min_child_weight': 5},\n",
       "  {'max_depth': 7, 'min_child_weight': 6},\n",
       "  {'max_depth': 8, 'min_child_weight': 4},\n",
       "  {'max_depth': 8, 'min_child_weight': 5},\n",
       "  {'max_depth': 8, 'min_child_weight': 6}],\n",
       " 'rank_test_score': array([3, 1, 2, 6, 5, 4, 9, 7, 8], dtype=int32),\n",
       " 'split0_test_score': array([-0.58112533, -0.58311487, -0.58193501, -0.58327085, -0.58071658,\n",
       "        -0.58239633, -0.58993237, -0.58456894, -0.58772342]),\n",
       " 'split0_train_score': array([-0.46511427, -0.46809745, -0.47255743, -0.4169497 , -0.42318593,\n",
       "        -0.42970163, -0.36281903, -0.37654795, -0.38274692]),\n",
       " 'split1_test_score': array([-0.58704482, -0.58666703, -0.58638489, -0.58959589, -0.58872232,\n",
       "        -0.58601901, -0.59369178, -0.59396918, -0.59425693]),\n",
       " 'split1_train_score': array([-0.46372594, -0.46867995, -0.47024703, -0.41503248, -0.4220456 ,\n",
       "        -0.42748496, -0.36550731, -0.37440364, -0.38269088]),\n",
       " 'split2_test_score': array([-0.58912832, -0.58786821, -0.58861886, -0.59374025, -0.59105814,\n",
       "        -0.59138774, -0.59830493, -0.59638727, -0.59539193]),\n",
       " 'split2_train_score': array([-0.46561839, -0.46905158, -0.4706809 , -0.41458504, -0.42216144,\n",
       "        -0.42750745, -0.36462762, -0.37662915, -0.38675639]),\n",
       " 'split3_test_score': array([-0.59157791, -0.58930588, -0.59096859, -0.59098975, -0.59289148,\n",
       "        -0.59239217, -0.594909  , -0.59408847, -0.59820512]),\n",
       " 'split3_train_score': array([-0.46209471, -0.46807785, -0.46960757, -0.41448805, -0.42254065,\n",
       "        -0.4271616 , -0.36069685, -0.37316518, -0.37962867]),\n",
       " 'split4_test_score': array([-0.59312951, -0.59371058, -0.59379938, -0.59452877, -0.59523807,\n",
       "        -0.59501595, -0.60100479, -0.60349445, -0.60016693]),\n",
       " 'split4_train_score': array([-0.46108827, -0.46584772, -0.4701268 , -0.41319816, -0.4194996 ,\n",
       "        -0.42530497, -0.36318443, -0.37335132, -0.38152849]),\n",
       " 'std_fit_time': array([ 4.65548732,  2.39798958,  3.82021719,  2.87907412,  2.34844143,\n",
       "         3.03674565,  2.87680379,  1.27853413, 13.30197888]),\n",
       " 'std_score_time': array([0.07745076, 0.03788548, 0.07996855, 0.0251877 , 0.04617964,\n",
       "        0.01219415, 0.05815129, 0.03918701, 0.14678118]),\n",
       " 'std_test_score': array([0.00418936, 0.00346064, 0.00404065, 0.00400049, 0.00498704,\n",
       "        0.00458069, 0.0038147 , 0.00605848, 0.00425468]),\n",
       " 'std_train_score': array([0.00172811, 0.00111391, 0.00101606, 0.00121423, 0.00125814,\n",
       "        0.00139693, 0.00165127, 0.00150517, 0.00233485])}"
      ]
     },
     "execution_count": 20,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "gsearch2_2.cv_results_"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 21,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Best: -0.588133 using {'max_depth': 6, 'min_child_weight': 5}\n"
     ]
    },
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "/home/guanyu/.local/lib/python3.6/site-packages/sklearn/utils/deprecation.py:122: FutureWarning: You are accessing a training score ('mean_train_score'), which will not be available by default any more in 0.21. If you need training scores, please set return_train_score=True\n",
      "  warnings.warn(*warn_args, **warn_kwargs)\n",
      "/home/guanyu/.local/lib/python3.6/site-packages/sklearn/utils/deprecation.py:122: FutureWarning: You are accessing a training score ('std_train_score'), which will not be available by default any more in 0.21. If you need training scores, please set return_train_score=True\n",
      "  warnings.warn(*warn_args, **warn_kwargs)\n",
      "/home/guanyu/.local/lib/python3.6/site-packages/sklearn/utils/deprecation.py:122: FutureWarning: You are accessing a training score ('split0_train_score'), which will not be available by default any more in 0.21. If you need training scores, please set return_train_score=True\n",
      "  warnings.warn(*warn_args, **warn_kwargs)\n",
      "/home/guanyu/.local/lib/python3.6/site-packages/sklearn/utils/deprecation.py:122: FutureWarning: You are accessing a training score ('split1_train_score'), which will not be available by default any more in 0.21. If you need training scores, please set return_train_score=True\n",
      "  warnings.warn(*warn_args, **warn_kwargs)\n",
      "/home/guanyu/.local/lib/python3.6/site-packages/sklearn/utils/deprecation.py:122: FutureWarning: You are accessing a training score ('split2_train_score'), which will not be available by default any more in 0.21. If you need training scores, please set return_train_score=True\n",
      "  warnings.warn(*warn_args, **warn_kwargs)\n",
      "/home/guanyu/.local/lib/python3.6/site-packages/sklearn/utils/deprecation.py:122: FutureWarning: You are accessing a training score ('split3_train_score'), which will not be available by default any more in 0.21. If you need training scores, please set return_train_score=True\n",
      "  warnings.warn(*warn_args, **warn_kwargs)\n",
      "/home/guanyu/.local/lib/python3.6/site-packages/sklearn/utils/deprecation.py:122: FutureWarning: You are accessing a training score ('split4_train_score'), which will not be available by default any more in 0.21. If you need training scores, please set return_train_score=True\n",
      "  warnings.warn(*warn_args, **warn_kwargs)\n"
     ]
    },
    {
     "data": {
      "image/png": "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WWfx97//nUsvvZTNmzcnTXv22Wfz17/+FQiq/A4cOEBtbS0vvfQSM2bMYNeuXXznO9/hueeeY/ny5ZSUlLS48ZeXl/Ptb3+bV199lUWLFrF69eom2xPlvbS0lBkzZrBixQpuuukmysvLufjiixv3+frXv84999xDRkZ0z++n0hkg9oTOxcCv3H2PerqI9CytlTy6w8KFC1m4cCHTp08H4MCBA6xbt44ZM2bwjW98g1tuuYVLLrmEGTNmpHzMnJwcLrroIgCmTp1Kbm4u2dnZTJ06lU2bNiXc5xOf+AS5ubnk5uYyZMgQtm/fzqhRLSs5lixZwpw5cyguLgagqKiocdvll19ORkYGU6ZMYfv27a3m8cUXX+S3v/1t43cXFiYc5ASAU045hWXLlrF//35yc3M5+eSTKSsr469//Sv33Xcfr776Km+//TZnnnkmADU1NZxxxhlNjvH6669zzjnnNOb3yiuvZO3atY3bU8n7iBEjePbZZwF45plnGDJkCKeccgpLly5t9Vw7I5VA8wczW01QdfYVMxsM6FFkEWnk7tx666186UtfarFt2bJlPPvss9x6663MmjUraWmkuezs7MZutRkZGeTm5jYu19UlfqIhlgYgMzMzaTp3T9plN/4YrVWFxaT6h3d2djZjx47lkUce4WMf+xgnnngizz//PBs2bGDy5Mls2LCBCy+8kF/96ldJj9FWftqb95dffpmnn36aZ599lkOHDrFv3z6uueYaHnuswy0jCaXSGWAecAZQ4u61QCXBk/0ichTr168f+/fvB+DjH/84P/3pTzlw4AAAH3zwATt27KC8vJz8/HyuueYavvGNb7B8+fIW+6bDzJkzeeKJJ9i9ezcAe/bs6dBxzj77bH7xi18A8Kc//YmKioo208+fP5+zzz6bGTNm8JOf/IRp06ZhZpx++um8/PLLrF+/HoCqqqompRWAU089lRdeeIGKigrq6ur4zW9+02YeW/utv/vd77JlyxY2bdrEr3/9a84///wuDzKQ2sgA2cDngcfN7EngemB3l+dERI4ogwYN4swzz+SEE05g0aJFfPazn+WMM85g6tSpzJkzh/3797Nq1SpOPfVUpk2bxt13383tt98OwA033MDs2bM577zz0pL3j3zkI9x2222cc845nHTSSfzTP/1Th45zxx138OKLL3LyySezcOHCNh/+njFj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\n",
      "text/plain": [
       "<matplotlib.figure.Figure at 0x7ff28b7eef28>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "print(\"Best: %f using %s\" % (gsearch2_2.best_score_, gsearch2_2.best_params_))\n",
    "test_means = gsearch2_2.cv_results_[ 'mean_test_score' ]\n",
    "test_stds = gsearch2_2.cv_results_[ 'std_test_score' ]\n",
    "train_means = gsearch2_2.cv_results_[ 'mean_train_score' ]\n",
    "train_stds = gsearch2_2.cv_results_[ 'std_train_score' ]\n",
    "\n",
    "pd.DataFrame(gsearch2_2.cv_results_).to_csv('my_preds_maxdepth_min_child_weights_2.csv')\n",
    "\n",
    "# plot results\n",
    "test_scores = np.array(test_means).reshape(len(min_child_weight), len(max_depth))\n",
    "train_scores = np.array(train_means).reshape(len(min_child_weight), len(max_depth))\n",
    "\n",
    "for i, value in enumerate(min_child_weight):\n",
    "    pyplot.plot(max_depth, test_scores[i], label= 'test_min_child_weight:'   + str(value))\n",
    "#for i, value in enumerate(min_child_weight):\n",
    "#    pyplot.plot(max_depth, train_scores[i], label= 'train_min_child_weight:'   + str(value))\n",
    "    \n",
    "pyplot.legend()\n",
    "pyplot.xlabel( 'max_depth' )                                                                                                      \n",
    "pyplot.ylabel( '- Log Loss' )\n",
    "pyplot.savefig( 'max_depth_vs_min_child_weght2.png' )"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "再次调整弱分类器数目"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 23,
   "metadata": {},
   "outputs": [],
   "source": [
    "def modelfit(alg, X_train, y_train, useTrainCV=True, cv_folds=None, early_stopping_rounds=100):\n",
    "    \n",
    "    if useTrainCV:\n",
    "        xgb_param = alg.get_xgb_params()\n",
    "        xgb_param['num_class'] = 3\n",
    "        \n",
    "        xgtrain = xgb.DMatrix(X_train, label = y_train)\n",
    "        \n",
    "        cvresult = xgb.cv(xgb_param, xgtrain, num_boost_round=alg.get_params()['n_estimators'], folds =cv_folds,\n",
    "                         metrics='mlogloss', early_stopping_rounds=early_stopping_rounds)\n",
    "        \n",
    "        n_estimators = cvresult.shape[0]\n",
    "        alg.set_params(n_estimators = n_estimators)\n",
    "        \n",
    "        print (cvresult)\n",
    "        #result = pd.DataFrame(cvresult)   #cv缺省返回结果为DataFrame\n",
    "        #result.to_csv('my_preds.csv', index_label = 'n_estimators')\n",
    "        cvresult.to_csv('my_preds_7_4_270.csv', index_label = 'n_estimators')\n",
    "        \n",
    "        # plot\n",
    "        test_means = cvresult['test-mlogloss-mean']\n",
    "        test_stds = cvresult['test-mlogloss-std'] \n",
    "        \n",
    "        train_means = cvresult['train-mlogloss-mean']\n",
    "        train_stds = cvresult['train-mlogloss-std'] \n",
    "\n",
    "        x_axis = range(0, n_estimators)\n",
    "        pyplot.errorbar(x_axis, test_means, yerr=test_stds ,label='Test')\n",
    "        pyplot.errorbar(x_axis, train_means, yerr=train_stds ,label='Train')\n",
    "        pyplot.title(\"XGBoost n_estimators vs Log Loss\")\n",
    "        pyplot.xlabel( 'n_estimators' )\n",
    "        pyplot.ylabel( 'Log Loss' )\n",
    "        pyplot.savefig( 'n_estimators4_2_3_699.png' )\n",
    "    \n",
    "    #Fit the algorithm on the data\n",
    "    alg.fit(X_train, y_train, eval_metric='mlogloss')\n",
    "        \n",
    "    #Predict training set:\n",
    "    train_predprob = alg.predict_proba(X_train)\n",
    "    logloss = log_loss(y_train, train_predprob)\n",
    "\n",
    "        \n",
    "    #Print model report:\n",
    "    print (\"logloss of train :\" )\n",
    "    print (logloss)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## 从之前的两张图形来看，应该是深度为7，minchild为4"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 24,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "     test-mlogloss-mean  test-mlogloss-std  train-mlogloss-mean  \\\n",
      "0              1.038398           0.000419             1.036706   \n",
      "1              0.988088           0.001526             0.984664   \n",
      "2              0.944405           0.001159             0.939627   \n",
      "3              0.907243           0.000720             0.901048   \n",
      "4              0.874999           0.000390             0.867496   \n",
      "5              0.846177           0.000266             0.837357   \n",
      "6              0.821486           0.000357             0.811402   \n",
      "7              0.799817           0.000236             0.788420   \n",
      "8              0.781057           0.000330             0.768311   \n",
      "9              0.764301           0.000537             0.750296   \n",
      "10             0.749332           0.000580             0.733988   \n",
      "11             0.736030           0.000223             0.719503   \n",
      "12             0.724263           0.000490             0.706470   \n",
      "13             0.713805           0.000182             0.694970   \n",
      "14             0.704474           0.000371             0.684377   \n",
      "15             0.696023           0.000506             0.674815   \n",
      "16             0.688302           0.000365             0.666000   \n",
      "17             0.681562           0.000360             0.658120   \n",
      "18             0.675594           0.000493             0.650976   \n",
      "19             0.669864           0.000795             0.644112   \n",
      "20             0.664878           0.000994             0.638120   \n",
      "21             0.660299           0.001201             0.632544   \n",
      "22             0.656249           0.001122             0.627288   \n",
      "23             0.652317           0.001070             0.622463   \n",
      "24             0.648632           0.001075             0.617862   \n",
      "25             0.645130           0.001423             0.613347   \n",
      "26             0.642283           0.001350             0.609211   \n",
      "27             0.639817           0.001432             0.605685   \n",
      "28             0.637269           0.001515             0.602167   \n",
      "29             0.635050           0.001451             0.598974   \n",
      "..                  ...                ...                  ...   \n",
      "139            0.592570           0.001633             0.472993   \n",
      "140            0.592498           0.001695             0.472410   \n",
      "141            0.592304           0.001836             0.471611   \n",
      "142            0.592346           0.001765             0.470735   \n",
      "143            0.592332           0.001734             0.470000   \n",
      "144            0.592314           0.001761             0.469280   \n",
      "145            0.592300           0.001733             0.468683   \n",
      "146            0.592289           0.001788             0.468087   \n",
      "147            0.592254           0.001837             0.467449   \n",
      "148            0.592279           0.001786             0.466841   \n",
      "149            0.592251           0.001782             0.466142   \n",
      "150            0.592241           0.001782             0.465425   \n",
      "151            0.592210           0.001850             0.464752   \n",
      "152            0.592181           0.001835             0.464114   \n",
      "153            0.592164           0.001815             0.463458   \n",
      "154            0.592109           0.001815             0.462812   \n",
      "155            0.592069           0.001816             0.462290   \n",
      "156            0.592089           0.001826             0.461544   \n",
      "157            0.592092           0.001870             0.460849   \n",
      "158            0.592074           0.001873             0.460205   \n",
      "159            0.592110           0.001763             0.459635   \n",
      "160            0.592104           0.001685             0.459147   \n",
      "161            0.592018           0.001627             0.458365   \n",
      "162            0.592063           0.001662             0.457811   \n",
      "163            0.591932           0.001672             0.457264   \n",
      "164            0.591905           0.001778             0.456360   \n",
      "165            0.591846           0.001838             0.455656   \n",
      "166            0.591851           0.001751             0.455042   \n",
      "167            0.591806           0.001821             0.454567   \n",
      "168            0.591782           0.001831             0.453933   \n",
      "\n",
      "     train-mlogloss-std  \n",
      "0              0.000904  \n",
      "1              0.002241  \n",
      "2              0.002065  \n",
      "3              0.001840  \n",
      "4              0.001564  \n",
      "5              0.001411  \n",
      "6              0.001381  \n",
      "7              0.001568  \n",
      "8              0.002265  \n",
      "9              0.002541  \n",
      "10             0.002321  \n",
      "11             0.002242  \n",
      "12             0.002590  \n",
      "13             0.002209  \n",
      "14             0.002358  \n",
      "15             0.002147  \n",
      "16             0.002115  \n",
      "17             0.002216  \n",
      "18             0.002329  \n",
      "19             0.001840  \n",
      "20             0.001734  \n",
      "21             0.001629  \n",
      "22             0.001751  \n",
      "23             0.001968  \n",
      "24             0.001877  \n",
      "25             0.001549  \n",
      "26             0.001442  \n",
      "27             0.001243  \n",
      "28             0.001204  \n",
      "29             0.001293  \n",
      "..                  ...  \n",
      "139            0.002341  \n",
      "140            0.002147  \n",
      "141            0.002108  \n",
      "142            0.002157  \n",
      "143            0.002157  \n",
      "144            0.002105  \n",
      "145            0.002153  \n",
      "146            0.002070  \n",
      "147            0.002009  \n",
      "148            0.002105  \n",
      "149            0.002141  \n",
      "150            0.001946  \n",
      "151            0.001690  \n",
      "152            0.001614  \n",
      "153            0.001533  \n",
      "154            0.001496  \n",
      "155            0.001463  \n",
      "156            0.001468  \n",
      "157            0.001551  \n",
      "158            0.001608  \n",
      "159            0.001609  \n",
      "160            0.001716  \n",
      "161            0.001709  \n",
      "162            0.001691  \n",
      "163            0.001673  \n",
      "164            0.001659  \n",
      "165            0.001639  \n",
      "166            0.001623  \n",
      "167            0.001601  \n",
      "168            0.001702  \n",
      "\n",
      "[169 rows x 4 columns]\n",
      "logloss of train :\n",
      "0.48005043539346515\n"
     ]
    },
    {
     "data": {
      "image/png": "iVBORw0KGgoAAAANSUhEUgAAAYkAAAEXCAYAAABYsbiOAAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAALEgAACxIB0t1+/AAAADl0RVh0U29mdHdhcmUAbWF0cGxvdGxpYiB2ZXJzaW9uIDIuMS4yLCBodHRwOi8vbWF0cGxvdGxpYi5vcmcvNQv5yAAAIABJREFUeJzt3Xl8XHW9//HXZ7I1adOmSwpt032DgqWUsoOAiBSugCwiVVBA5aIXF5TrcvWqPxQX7nWXCyIiggIii6Liwg6KYBdalpbuW9rSpm3SNm2abT6/P75n2mmaSSchk5l03s/H43TmLHPOZ06m857zPZu5OyIiIu2JZbsAERHJXQoJERFJSSEhIiIpKSRERCQlhYSIiKSkkBARkZQUEiJJzOy/zOyObNchkisUEr2MmfUzs1Vm9v6kYeVmtsbMLkkaNsPM/mhmtWZWZ2YLzewmMxsYjb/SzFrNrD7qVpjZxzJc++lmVp3JZXRGe/W4+zfd/SMZWt4qM3tnJuadCT319+pt6yXfKCR6GXevB64BfmhmldHgm4E57v4ggJmdBDwD/AM4zN0rgJlAC3BU0uz+6e793L0fcAlws5kd3TPvRDrDzAqzXYPkKXdX1ws74C7gPuB0YAswLGnc34EfH+D1VwJ/bzPsX8D7k/rPB14H6gihc3jSuMOjYXXRNOcnjTsXWAjsANYBNwB9gQYgDtRH3fAU7+sW4E/R618CxqexPg4DHge2AouBS7tSD/A14FfR68YADlwFrAVqgWuBY4FXovf+k6TljAeeiv4em4FfAxXRuHuiZTVEy/pcGut4FfD5aFmNQGHUvy56L4uBM9tZFycAbwIFScMuBF6Jnh8HzAG2AxuB76VYp6cD1SnGDQDuBmqA1cCXgVg0rgD4brQOVgLXReuxMMW8VgHvTDHuo8Cy6O/6aOIzAxjwfWATsC1aR0em+ntn+/9rb+6yXoC6Lv7hYCCwIfqPeFXS8L5AK3D6AV5/JUkhEX3x1QGTov5JwE7gLKAI+Fz0n7U46l8G/FfU/47oP+Tk6LUbgFOT6pwePU/5pZNUx13RF8Jx0Zfir4H7D/CavoQv8aui10yP1ssRna2H9kPiNqAP8C5gN/A7YCgwIvqSOi2afkK0vkqASuA54AdJ897ny7CjdZw0/XxgJFAKTI7e5/Ck+toNUGA5cFZS/2+BL0TP/wlcET3vB5yQYh4p/16EgPg9UB7VsQT4cDTuWsKXdFW0vp+gCyERfa42R3/PEuDHwHPRuLOBuUAFITAOJ/qhlOrvra5rnZqbeil3ryX8Ai0DHk4aNZDQjPhmYoCZ3Rztl9hpZl9OmvaEaHg9YSviHmBpNO59wJ/c/XF3bwb+l/BFdRLhl2o/4Nvu3uTuTwF/BGZFr20GpphZf3evdfd5nXx7D7v7v9y9hRAS0w4w/buBVe7+C3dviZb3EKEJrTvq+bq773b3vxG+1O9z903uvg54HjgawN2XReur0d1rgO8Bp3Uw347WccKP3H2tuzcQwr8kei9F7r7K3ZenmPd9RH8PMysn/Lq+L2l9TDCzIe5e7+4vdmZlmFlBVPsX3X2Hu68ibDlcEU1yKfBDd6+OPqff7sz8k3wAuNPd57l7I/BF4EQzGxO9h3LCFqS5+yJ335D0/t7K31uSKCR6KTO7nPAL7gngO0mjagnNGsMSA9z9cx72SzxC+KWd8KK7V3jYJ3EocATwzWjccEIzQmIeccKv2BHRuLXRsITV0TiAiwlfSqvN7FkzO7GTb+/NpOe7CIHUkdHA8VHg1ZlZHeEL5tBuqmdj0vOGdvr7AZjZUDO738zWmdl24FfAkA7m29E6TlibNH4Z8GnC1s6maFnDU8z7XuAiMysBLgLmuXtiWR8mbMW8YWazzezdHdTYniGELcjVScOS//7Dk+tu87wz2q6fekJT3ojoh8lPCE2TG83sdjPrH036Vv/ekkQh0QuZ2VBCe+xHgX8HLjWztwO4+05CO/5FnZmnu28k/Po+Lxq0nvDlm1imEZo91kXjRppZ8udnVDQOd5/t7hcQmmR+BzyQWExnauqEtcCzUeAlun7u/rEerudb0Tynunt/4HJCU0hC2+V1tI7bfY273+vup0Svc/b9gZA83ULCF+w5wPsJoZEYt9TdZxHWx3eAB82sb/pvk82EX+ujk4bt+fsTmnuqksaN7MS8k7VdP32Bwez9nP3I3Y8h/LiZBPxnNDzV31u6QCHRO/0E+J27Px1tYn8O+Fn0q5Go/2oz+0IUKJhZFTA21QzNbDBh5+br0aAHgH8zszPNrAj4LGHn6QuEENoJfM7MiszsdEK43G9mxWb2ATMbEDWhbCc0k0D4BT7YzAZ003pI+CMwycyuiOopMrNjzezwHq6nnLBTus7MRhB9aSXZCIxL6u9oHe/HzCab2Tuiv/NuwlZMa3vTRu4FPgm8nbBPIjGfy82sMtpyqYsGp5yPmfVJ7ghbqg8AN0WHX48GPkPYckq8r0+Z2QgzqyDsbD+QojbLKYzqv8rMpkXv+ZvAS+6+Kvr7Hh+tt53R+mg9wN9buiLbO0XUda4D3kP4hVXRZviTwE1J/ccDjxG+BOqA14CbgMHR+CsJ/3kSR/ZsIrRZD02ax4WEHZDbgGeJdgRH446Ihm2LprkwGl4M/IXQ7LUdmA2ckvS6OwlNBnWkPrrpG0n9p3OAnd3RdJMJR0TVRPN/irAvo1P10P6O68Kk6atJOiiA8MX45aR1Mjdan/MJX/rVSdNeAKyJlnVDGut4Ffvu6J5K2He0g7Bz/4/trcOk6UcRvtD/1Gb4r6K/dz3hR8F7Urz+9Oj9t+0mEPZ9/Spa32uBr7D36KZCwpbuFsLRTdcTtjwsxXJWtbOMb0TjriXshE+836po+JmEI5rq2XskWb8D/b3Vdb6zaIWLiGSEmZ0D3Obuow84seQcNTeJSLcys1IzO9fMCqNmt68SDpqQXkhbEtIrmNmpwJ/bG+fh6CzJEWZWRmg6O4yw3+RPwKfcfXtWC5MuUUiIiEhKam4SEZGUet1Fw4YMGeJjxozJdhkiIr3K3LlzN7t75YGn3FevC4kxY8YwZ86cbJchItKrmNnqA0+1PzU3iYhISgoJERFJSSEhIiIpKSRERCQlhYSIiKSkkBARkZQUEiIiklLehMS6ugaeemPjgScUEZE98iYkbvu/71L464up392U7VJERHqNvAmJSyaX8PaCV6l5c92BJxYRESCPQqLP4HCP9rqNXTozXUQkL+VNSJRXjgJg15bqLFciItJ75E1IDDo0hERzrZqbRETSlTch0adiOHGM+PYN2S5FRKTXyJuQoKCQOqugaOeb2a5ERKTXyJ+QALYVDaG0sSbbZYiI9Bp5FRINJUPp36yQEBFJV16FRHPfQxnsW2lqiWe7FBGRXiFjIWFmd5rZJjN7LcV4M7MfmdkyM3vFzKZnqpY9yyw/lMG2g0212zK9KBGRg0ImtyTuAmZ2MP4cYGLUXQPcmsFaACgaGE6oq924NtOLEhE5KGQsJNz9OWBrB5NcANztwYtAhZkNy1Q9AH0HVwGwo0YhISKSjmzukxgBJH9bV0fD9mNm15jZHDObU1PT9R3PAw4ZDUCDzroWEUlLNkPC2hnm7U3o7re7+wx3n1FZWdnlBfavHAlA6zaddS0iko5shkQ1MDKpvwpYn8kFWtkgGikiVq/7SoiIpCObIfEo8MHoKKcTgG3untlrZphRVzCYkgaddS0iko7CTM3YzO4DTgeGmFk18FWgCMDdbwMeA84FlgG7gKsyVUuyDa0VFDdv6olFiYj0ehkLCXefdYDxDvxHppafSp+COBXxWlpa4xQW5NW5hCIinZZ335LxUScxzLaycfvubJciIpLz8i4kigaNosSa2bhB50qIiBxI3oVEv0PGArDtzRVZrkREJPflXUgMGjYOgIZNq7JbiIhIL5B3IVEyJJx1Ha9Tc5OIyIHkXUjQp4IGK6WoXmddi4gcSP6FhBm1RYdQ1qB7XYuIHEj+hQTQUDqMQS0bicfbvVSUiIhE8jIkWvpXMYzNbK5vzHYpIiI5LS9DonDgKAZZPes2bcl2KSIiOS0vQ6KscgwAtRuWZ7cQEZEcl5chUTF8PAA7da6EiEiH8jIkSqNzJVprV2e5EhGR3JaXIUH5MFo8Rk21mptERDqSnyERK2Cb9Wd0XCfUiYh0JD9DAtjZfzyDqaWxpTXbpYiI5Ky8DYnWgWMZbRtZu3VXtksREclZeRsSxZUTGGLbWbNBtzIVEUklb0OiYsQkAOqqF2e5EhGR3JW3IdF3WAiJ3ZuWZrkSEZHclbchwcBwh7pY7cosFyIikrvyNyRK+rG9YBBl9WuyXYmISM7K35AA6vuOZGjLenY36zBYEZH25HVItAwIh8Gu3qLDYEVE2pPXIVE8dDzDbCurN+qS4SIi7cloSJjZTDNbbGbLzOwL7YwfbWZPmtkrZvaMmVVlsp62+o+YDMA9jz3Tk4sVEek1MhYSZlYA3AKcA0wBZpnZlDaT/S9wt7tPBW4EvpWpetpTdsgEAM4YWt+TixUR6TUyuSVxHLDM3Ve4exNwP3BBm2mmAE9Gz59uZ3xmDRoXHtf+q0cXKyLSW2QyJEYAa5P6q6NhyRYAF0fPLwTKzWxw2xmZ2TVmNsfM5tTU1HRfhaUD2VlYQbnvIB737puviMhBIpMhYe0Ma/tNfANwmpm9DJwGrANa9nuR++3uPsPdZ1RWVnZrkfXl4xnj1ayra+jW+YqIHAwyGRLVwMik/ipgffIE7r7e3S9y96OBL0XDtmWwpv1Y5WQm2HqWbtzek4sVEekVMhkSs4GJZjbWzIqBy4BHkycwsyFmlqjhi8CdGaynXeVVRzDQ6llbvfbAE4uI5JmMhYS7twDXAX8FFgEPuPvrZnajmZ0fTXY6sNjMlgCHADdlqp5USocfDkB99cKeXrSISM4rzOTM3f0x4LE2w76S9PxB4MFM1nBAleFcCdusS4aLiLSV12dcA9B/BI2xMsrrV+gIJxGRNhQSZtSXj2V0XEc4iYi0pZAAfMgkJsTW8eFfzs52KSIiOUUhQTjCabht5eIj+me7FBGRnKKQAEoODUc4bVurI5xERJIpJAAqDwPAV/8zy4WIiOQWhQTAoLE0x0oYEt9MfeN+VwUREclbCgmAWAG7Bkxksq1h8Zu6PIeISIJCIlI4/G0cHlvDwvUKCRGRBIVEpKxqKoNtB2vWrMp2KSIiOUMhEbFDjgCgcf2rWa5ERCR3KCQSopDoW/sGrbo8h4gIoJDYq+8QGkoqmeCrWbZJ97wWEQGFxD586BQm21rmr63NdikiIjlBIZGktGoqk2LVLFi9OduliIjkBIVEElvyV4ppYcuq17JdiohITlBIJLvs1wAMqH2VHbubs1yMiEj2KSSSDZ5AS1E/ptpyXqnelu1qRESyTiGRLBaDYdOYGlvB/LV12a5GRCTrFBJtFI48hsNja3l19cZslyIiknUKibaGT6eIFjYtnYu7TqoTkfymkGhrxHQAjmC5TqoTkbynkGhrwEhaSwcz1Vbw4oot2a5GRCSrFBJtmRGrOoZjilby4sqt2a5GRCSrFBLtsKpjGePVLFy+WvslRCSvZTQkzGymmS02s2Vm9oV2xo8ys6fN7GUze8XMzs1kPWkbdQIxnNENr7O8Zme2qxERyZoDhoSZjTezkuj56Wb2STOrSON1BcAtwDnAFGCWmU1pM9mXgQfc/WjgMuD/OvsGMmLEMXiskGNji7VfQkTyWjpbEg8BrWY2Afg5MBa4N43XHQcsc/cV7t4E3A9c0GYaB/pHzwcA69OqOtOK+8KwozipaKlCQkTyWjohEXf3FuBC4Afufj0wLI3XjQDWJvVXR8OSfQ243MyqgceAT7Q3IzO7xszmmNmcmpqaNBb91tmoEzmS5by0dINuQiQieSudkGg2s1nAh4A/RsOK0nidtTOs7bftLOAud68CzgXuMbP9anL32919hrvPqKysTGPR3WDUCRR5EyN3L2FBtS7RISL5KZ2QuAo4EbjJ3Vea2VjgV2m8rhoYmdRfxf7NSR8GHgBw938CfYAhacw780YeD8CxBYt5ZnHPbL2IiOSaA4aEuy9090+6+31mNhAod/dvpzHv2cBEMxtrZsWEHdOPtplmDXAmgJkdTgiJ3PhG7jcUCvtwVuECnlm8KdvViIhkRTpHNz1jZv3NbBCwAPiFmX3vQK+L9mNcB/wVWEQ4iul1M7vRzM6PJvss8FEzWwDcB1zpuXRiwlGXMbVgNQurt1CzozHb1YiI9LjCNKYZ4O7bzewjwC/c/atm9ko6M3f3xwg7pJOHfSXp+ULg5M4U3KPGnUHx3LuYait4bkkNFx9Tle2KRER6VDr7JArNbBhwKXt3XOeHsW/HMWaWLuLJN3TpcBHJP+mExI2EJqPl7j7bzMYBSzNbVo4oG4QNn8a7Shfx9Bs17G5uzXZFIiI9Kp0d179196nu/rGof4W7X5z50nLEuNMZtWshseZ6nl2SG/vURUR6Sjo7rqvM7BEz22RmG83sITPLn8b5cWcQ8xbe0Wcpf33tzWxXIyLSo9JpbvoF4dDV4YQzpv8QDcsPo04Ai/G+2JM8sWgjTS3xbFckItJj0gmJSnf/hbu3RN1dQA+d9pwDCktg4ruYXrqB7bub+aeu5SQieSSdkNhsZpebWUHUXQ7k1zflpJmU7azmqD4b+f38ddmuRkSkx6QTElcTDn99E9gAXEK4VEf+mHQ2ANceuoS/vvYmDU06yklE8kM6Rzetcffz3b3S3Ye6+3uAi3qgttzRfzgMO4qT43PY2dTK44t0zoSI5Ieu3pnuM91aRW8waSblNfM4rH8zv3tZTU4ikh+6GhLtXQb84DbpbMzjXMf9PLukhs31upaTiBz8uhoSuXMRvp4yfDr0r+KM4S20xp0H51ZnuyIRkYxLGRJmtsPMtrfT7SCcM5FfzGDKBfRd+yynjy7h3pfWENcd60TkIJcyJNy93N37t9OVu3s6V489+Ey5AFqbuK5qOWu27uIfyzdnuyIRkYzqanNTfqo6FsqHc3T9swzqW8yvX1yT7YpERDJKIdEZsRjgFCx+jA8cPZDHF22kunZXtqsSEckYhURnlVUCztWDXsOAO/++KssFiYhkjkKis659DgaNY+CSBzn/qOHcP3sN23Y1Z7sqEZGMSOdS4e0d5bQ2unz4uJ4oMqeYwVGzYNXzfPzoInY1tfKrl1ZnuyoRkYxIZ0vie8B/Ei4TXgXcAPwMuB+4M3Ol5bCp7wNgwoY/MaC0iO8/voSdjS1ZLkpEpPulExIz3f2n7r7D3be7++3Aue7+G2BghuvLTQNHQ8kAeP673HXlMbTEnbteWJXtqkREul06IRE3s0vNLBZ1lyaNy9+zyfodAi27ObrlFc48bCi3P7eC7bu1b0JEDi7phMQHgCuATVF3BXC5mZUC12Wwttx27fNQOgjm/Jzrz5rEtoZmfvbcimxXJSLSrdK5VPgKdz/P3YdE3XnuvszdG9z97z1RZE4q6gPTr4A3HuPI8p28e+owbn9uBevqGrJdmYhIt0nn6Kaq6EimTWa20cweMrOqdGZuZjPNbLGZLTOzL7Qz/vtmNj/qlphZXVfeRNYccxV4K/z8XXzx3MMB+Paf38hyUSIi3Sed5qZfAI8SLuo3AvhDNKxDZlYA3AKcA0wBZpnZlORp3P16d5/m7tOAHwMPd678LBs0FkoHwo43GdHX+PfTxvOHBev518qt2a5MRKRbpBMSle7+C3dvibq7gMo0XnccsCxqrmoiHDJ7QQfTzwLuS2O+ueXSeyDeDAvu5drTxjGiopT/euRVGlt0i1MR6f3SCYnNZna5mRVE3eXAljReNwJYm9RfHQ3bj5mNBsYCT6Ux39wy5hQYcQz844eUFcA3LjySZZvqufWZ5dmuTETkLUsnJK4GLgXeBDYAlwBXpfG69u5el+qQ2cuAB9293Z/fZnaNmc0xszk1NTVpLLoHmcEp10PtKrj1JM6YPJTzjxrO/z29nCUbd2S7OhGRtySdo5vWuPv57l7p7kPd/T3ARWnMuxoYmdRfBaxPMe1ldNDU5O63u/sMd59RWZlOS1cPm/xvUFgK29ZCPM5XzptCeZ9CPn3/fJpa4tmuTkSky7p6gb/PpDHNbGCimY01s2JCEDzadiIzm0w4c/ufXawl+2IxuOAn0LwLFj7CkH4lfPviqSzcsJ3vP7Ek29WJiHRZV0Oivaakfbh7C+Fku78Ci4AH3P11M7vRzM5PmnQWcL+79+6zt4+4ECoPh2e+DfFWzppyCJX9Srj1meU8vXhTtqsTEekS68p3s5mtcfdRGajngGbMmOFz5szJxqIP7PXfwW8/BIMnwifm0NDUykW3vsC62l08et0pjBnSN9sVikieMrO57j6js69LuSWR4hLh281sB+GcCWnr8POhuB/UrYamXZQWF3D7FccQixkfuXsOtTubsl2hiEinpAwJdy939/7tdOXuXtiTRfYasRi8/wFobYJ/3gLAyEFl3Hb5MazZuourfzmbXU26pLiI9B66M113G3MylA6GZ74J2zcAcMK4wfx41tEsWFvHtb+apyOeRKTXUEhkwsAx4A5/+9KeQWcfcSjfuuhtPLekhht+u4B4vHfvpxeR/KCQyIRrnoLTPg+vPQQrntkz+H3HjuLzMw/j0QXrOfamJ7RFISI5TyGRKad8Ggr7wL2XQfPuPYOvPW0cnz1rElt2NvHhX86mXrc9FZEcppDIlKJSGDQeWhrgqa/vGWxmfOLMidx8yVSeX7qZ4256gk3bd3cwIxGR7FFIZNLHX4AZV4cjnVb9Y59Rl84YyS+uOpbdza2ccvPTLFjbu26lISL5QSGRaWd9HQpL4J4LYde+95k4Y/JQfv8fpzCkbzGX3PYCP//7Snr7iecicnBRSGRaST+48jHwODxyLcT33Vn9tqoBPPapU+lbUsjX/7iQj949VyfdiUjOUEj0hKpjYOa3YOlf4UfT9htdUVbMy/99Fl89bwpPLtrIcd98gqfe2JiFQkVE9qWQ6CnHfgTKhoRLdqx8br/RZsZVJ4/lD584hfGV/bj6rjnM+MbjbGtozkKxIiKBQqKnmMGnFsCQyfDg1bC9/VtrHDliAL+/7mSuO2MCtbuaedf3n+XhedW06uQ7EckChURPKukHl94Nu7bAj4+Bhtr2Jyss4IazJ/PIx09iSL8SPvPAAs754XM8NLdaJ+CJSI9SSPS0oYfB5Q9BazPc+z5o2ply0qlVFfzhulP48ayjcYfP/nYBR3z1L/zfM8vYtkvNUCKSeV26n0Q25fT9JDojce+JPhVww1IoLO5wcnfn2SU13PH8Sv6+bDMxgw+eOIbLTxjNhKH9eqhoEemtuno/CYVENs27Gx79RLir3UV3QEF6V2BftGE7dzy/kofnVePAEcP7855pIzjvqOEcOqBPZmsWkV5JIdFb/fAoqF0Fh70bLrkznHiXppodjfxhwXq++/hidja2AnDiuMG85+jhzDxyGANKizJUtIj0NgqJ3uzF2+Avnw9NT59ZCMWdv83pys07+f38ddz2zHJ2t8QxYEBZEf959mTecdhQhg0o7f66RaTXUEj0dj+eAVuWQtVx8IEHoHRgl2bj7ry6bhvX3D2H2l3NNEZHQx12aDknjBvMtJEVTBtZwejBZZhZd74DEclhComDwcJH4YEPhivIfvxFGDj6Lc3O3Vm2qZ6n3tjELU8vo76xhcTpFoUx4/TJQzl2zEBmjBnE20YMoLhQB7uJHKwUEgeLFc/CA1dAQTFcdi+MPK7bZt3SGmfppnrmr61j7upa/rhgPbujLQ0z6FdSSFlxAZ88cyITKvsxYWg/BvdLfx+JiOQuhcTBpGYJ/PRUaGmEi++At12SuUXtaGTu6q3MXlXL/bPX0NDUSvLJ3YUxo7SogHcfNYzxUXBMGNqP4QNKicXUXCXSWygkDjY7t8BvLoc1L0D/qnBJjzQPkX0r4nFnw/bdLN24g2Wb6vnpcyvY3dRKQ3MrLUnpETPoU1TAu6YcEgVHOROG9mPUoDI1W4nkIIXEwailEf78OZh7F4w5FS645S3vp3grttQ3smxTPctq6vnxk0upqW+iwIym1n0vFVJUYBQXxjhtUiXDB5QyrKKU4QP6MLyilGEVfRjSt0RbISI9LCdDwsxmAj8ECoA73P3b7UxzKfA1wIEF7v7+juaZVyGR8OMZsHVFOIfijC/B8df2yFZFuuobW1i+qZ5lm+pZvXUX9720msaWOE2tcZpa4rS9NqEBxYUxigtjlBTGKC6I8fEzJjC4bzEVZcUM7FvEwLJiKsqKKCksyMp7EjnY5FxImFkBsAQ4C6gGZgOz3H1h0jQTgQeAd7h7rZkNdfdNHc03L0MCoG5t2E/RUAvDpsH5P4JhR2W7qgNyd+p2NbOuroEN23azYVsD6+oaeHBOuFhhIkxSiRkUxmIUFhiFMWNXUyuD+hZz2bEj9wRKRVkxA8uKGVgWnvfvU6jDe0XayMWQOBH4mrufHfV/EcDdv5U0zc3AEne/I9355m1IALjDwt/BQx+FeDOc9Ak4/YtdOvkul7TGnc31jWzd2UTtribqdjXvfdzZxO/mr6Ol1WmJOzubWigw22f/SHsKYxYFS4yCmBEzKIgZBTHjoulVe47k6ltcSN+SQspKCvYMKy0qoKSoIGzlJG3tKHikN8vFkLgEmOnuH4n6rwCOd/frkqb5HWFr42RCk9TX3P0v7czrGuAagFGjRh2zevXqjNTcazTUwuNfhXm/DIfKnnMzHH1FTjVBZVo87mzf3RwFSzN1u/Y+3vn3lbTEnZbWOC1xp9WdeDyEUXjudOVTbwYxC4Fj0WPMDDPY3dRKv2gLJmbG6ZMqKSkK4ZIInL2hE/UXxSgu2Pu8pLBgTyiFYQXR6xVU8tblYki8Fzi7TUgc5+6fSJrmj0AzcClQBTwPHOnudanmm9dbEm2teREe/wqsfQkKS+Gin8Jh50FMRxcdSFNLnJ2NLexsamFnY2v0GLrdzXEaW1r3NIfd9cIq3J24Q9wdjx7jzp7h9bubKS0u6HCa7pAcVC2tTklRbE9QxcwwIBazvc8tvMiAc982jL+8tgEz48KjR+zZsiqMGQWxWPRxHxCHAAASu0lEQVQYtsAKYkaBJfeH8XsDMrGsNv1tQrTt4z61tnncb96JcYnl0v68Opp38nzzXVdDIpM/PauBkUn9VUDb27FVAy+6ezOw0swWAxMJ+y/kQEadAFf/FRY/Bg99JJytPfQIOPUz4cqyMe30TSXsOC9mYN+OL9EO8JFTx73l5bmH5rLGljiNza1hX0wUQo0tyf2tNDaH/TSNzXvHNSZP2xznsVc3sHVnE2XFhfsEWNydlhbfE1Tu4Dgtrc49L64m8aPw1meWd2lrqjeL8pK4R+G5Z7iFkUnTtcadgmii9vLFMJpb4xQVxGjz8n3mkxjR1BKnuDAWlpUY3+ZFu5tbKS1K+j9ryQ/h32ED+vD4Z0474HvtTpnckigkNCWdCawjfPG/391fT5pmJmFn9ofMbAjwMjDN3bekmq+2JFKIt8KrD8IfPw3Nu2DQODj503DUZZ26sqzkl3jUBNcaDyHW2uq0xON7++N7x7XE43u2kNo+JraYPJpn8haUk7wVFpr+nKT+FPNsdxkkzTuxHBLLSozbO+/WeFJ4Ru/FEwHK3hBNfA0m3kPy8EQ/7Bu8bedBYrnRsH8s27xPEJ8wblDK14MzZ9XeO1Xu+628t75DB/Thb9d3LSRyrrkJwMzOBX5A2N9wp7vfZGY3AnPc/VEL24DfBWYCrcBN7n5/R/NUSBxAPA6L/wSPXAtN9VA+POzgnv7BcPtUEclLORkSmaCQSJM7LH8SfnsVNG4PV5WdehlMfS8Mn97+NrSIHLS6GhLaw3mwMoMJ74QvroUPPw5j3w5zfg4/ewd8a0S4K17TrmxXKSI5TlsS+aShDl57CP725bDfok8FTL8CZnwYBo3NdnUikkFqbpL0ucPqF+Bft8OiP4DHYdxpcMRFcPh5UDYo2xWKSDdTSEjXbF8Pc38Jr/wGalcCBhPODIfQHvZvXb5DnojkFoWEvDXu8OYr8Poj8NrDULcaMJh4VgiMyedCaUW2qxSRLlJISPdxh/Uvh8B4/XewbU24/Mf4aAtj8jnQp3+2qxSRTsjFM66ltzKDEdNDd9aNsG4evP5wCIwlfwYsNEUdcSFMOhtKyrNdsYhkiLYkJH3xOKybs3cLY8d6wMJO7/HvCN0hR+ocDJEcpOYm6VnxOFT/KxwdNefOcEgtQKwobGWMPTXcTW/IJIWGSA5QSEh2bV8Py5+Glc+FpqnWpjA8VhQOq02ExuAJCg2RLFBISO5wD4fTrnweVv093CgpERr9DoUxp4TQGH2yQkOkhygkJHe5h3t0r3wOnroJGuugtTmMixWFHd+nXB8ufT7sKF21ViQDdHST5C4zGDw+dDOuCqGxeSms+We4YdKaf8Lj/52YGEadCKOOD48jj9MJfSJZpC0JyQ31m8Kd9ta+BHPvgqad7LmqflEZlPSHd34Nhk+DwRPz6latIt1BzU1ycGnaBevnha2MF24Jlzv31jDOYjDqpNA8NfpEqDoW+gzIbr0iOU4hIQe3eBxq3oA3Xw1ng798T7ipUkJhHyjuC8d/LGxtDJ8OfQdnr16RHKOQkPzTuAOqZ4czwt98NVx7auuKveMLSsLd+E76ZDh7fNhR2uKQvKUd15J/Ssr3numdsHs7bFgQmqr+8SNo2gFPfHXv+MJSmHI+DD86bG0c+jYoLuv52kV6CW1JyMFv5xbY8DKsezmEx7In9p63AVDUF468KGxtDJ8OQ6dAYXH26hXJADU3iXTG9g0hMP78+dBs1VQP8ZZopIX9GyXlcOZXwlbHkEkQK8hqySJvhUJC5K1wD/fQWDcvhMfcu0Nw7DmiqiAcTTX86NCNmA4Dx+pscek1FBIi3S0ehy1Lw9FU6+bB/HuheWe43StArDCcw/G290Ll5NANmQzlhyo8JOcoJER6QmszbFoUtjbWvxyer5sD8da901hB2NJIhEYiQAaMglgse7VLXtPRTSI9oaAIhk0N3TFXhmHu4Yzxmjdg85Lw+MpvYcP8vdeognASYFHfcDTVKZ+BQ6aEneR9h2TlrYikQ1sSIpnUUAs1S6BmUdjqmH9fOHucpP93iWarIy+KtjwmhccBVWq2km6Tk81NZjYT+CFQANzh7t9uM/5K4H+AddGgn7j7HR3NUyEhvZ471G+Eja+HrY5//BCaG8KNm/YcYUW05VEGRaVwwsfCEVaDJ8CgcbpSrnRazoWEmRUAS4CzgGpgNjDL3RcmTXMlMMPdr0t3vgoJOWi5w87NsHkx1ETdK78J4ZF8XgeEkGhtgX5D4dTPRlfZnQj9R2i/h7QrF/dJHAcsc/cVAGZ2P3ABsLDDV4nkKzPoVxm6MaeEYefeHB53b4cty/Z2s38ODVvDvpDHbkiaRyxcx6qoDGZcDUMmhq2PgWPCJdfVfCWdlMmQGAGsTeqvBo5vZ7qLzezthK2O6919bdsJzOwa4BqAUaNGZaBUkRzXp384YmrE9NB/xn+FR3fY8WYUHkth8zJYcG84x+O5m/edhxWEACnsA9NmQcVoGDg6PFaM0uVJpF2ZbG56L3C2u38k6r8COM7dP5E0zWCg3t0bzexa4FJ3f0f7cwzU3CSSppZG2LoyhMff/htadkddY3hMnO+xh0Fxv2hLpE8423zwhLA1UlKelbcg3ScXm5uqgZFJ/VXA+uQJ3H1LUu/PgO9ksB6R/FJYAkMPC93h5+07zh121kDt6nCmee1K+NfPQng0bYddNfDwR/dOX1C8dyvk+H8PO88Hjw9nnffp37PvS3pUJkNiNjDRzMYSjl66DHh/8gRmNszdN0S95wOLMliPiCSYhZ3e/YbCyGPDsLf/597xLU0hODYvCTvQt66ERY+GYHnq6/vOK1YUtjwKS+G4j4YASXSlFT33niQjMn0I7LnADwiHwN7p7jeZ2Y3AHHd/1My+RQiHFmAr8DF3f6Ojeaq5SSTLGuuhdhVsXR7u37F1Bbz+e2hp2P8orFhhCI+iPjDjw/sGSNkg7UjvQTl3CGymKCREclhzQxQgUXhsWQ6vPwzNu6G1cd9prQDwcNTV9A/uGyD9DtWhvN1MISEiua2lMewD2bo8NF+98KPQfBUrDOOSz0JPHMpb2CecTHjqZ6MAGQsDRuqy7V2gkBCR3iveCtuq926BPP/dsFXSsjucTLgP23sEVmEfOOX6sAM9ESBFfbLyFnKdQkJEDk7xOOzYEHakb10Bz3wn7P9ojg7p9dZ9p48VhSO7CktCiBSUwNnfCCcUDhoXtkzykEJCRPJP4lDerVGAPP3NsO+jJepaG9s/H6SkPxx5YQiNASNDVzES+g49aPeF5OJ5EiIimZV8KO+o48OZ5MkS18PatiYEyRP/L2yVeBxe/tW+F1QMM4yui9UMZYPDpU0qohAZUBW6PLu4orYkRCR/7d4W9oXUrYVtUffyr8Ml3mMF+x/SC+HEwoKoOWvarHAzqYpEiIyEPgNy8tBeNTeJiHS3libYvi4KkESYrIFFf4DGHWFLhTbfoVYQAmTMqSE49myJRE1a/Q7JytFZam4SEeluhcXhqKlBY/cdfsEt4TEeD/tEtlWH8KiLwmTbWljxbNgn0l6TVkFxCJIJ74TyYdB/WDhCa8jEsIM9h5q0FBIiIl0Vi0H5IaGrOqb9aRp3tGnSqoZ594QAWfxYaNJqu3O9oASGHw39h4cuESRVx4Yr9vYghYSISCaVlMPQw0OX8M6v7n3uDrvr9p6hvnlpOGt9yV+j+6Qnhcig8fDJeT1avkJCRCSbzMKlSUYcE7q2EiGyfQP0rezx8hQSIiK5LBEipQOzsviD86wRERHpFgoJERFJSSEhIiIpKSRERCQlhYSIiKSkkBARkZQUEiIikpJCQkREUup1V4E1sxpgdRdfPgTY3I3l9JTeWLdq7hm9sWbonXX39ppHu3unT9nudSHxVpjZnK5cKjfbemPdqrln9MaaoXfWna81q7lJRERSUkiIiEhK+RYSt2e7gC7qjXWr5p7RG2uG3ll3XtacV/skRESkc/JtS0JERDpBISEiIinlTUiY2UwzW2xmy8zsC9mupz1mNtLMnjazRWb2upl9Khr+NTNbZ2bzo+7cbNeazMxWmdmrUW1zomGDzOxxM1saPWbnjikpmNnkpPU538y2m9mnc21dm9mdZrbJzF5LGtbuurXgR9Fn/BUzm55DNf+Pmb0R1fWImVVEw8eYWUPS+r4tGzV3UHfKz4OZfTFa14vN7Owcqvk3SfWuMrP50fCurWt3P+g7oABYDowDioEFwJRs19VOncOA6dHzcmAJMAX4GnBDtuvroO5VwJA2w24GvhA9/wLwnWzXeYDPx5vA6Fxb18DbgenAawdat8C5wJ8BA04AXsqhmt8FFEbPv5NU85jk6XJwXbf7eYj+Xy4ASoCx0fdLQS7U3Gb8d4GvvJV1nS9bEscBy9x9hbs3AfcDF2S5pv24+wZ3nxc93wEsAkZkt6ouuwD4ZfT8l8B7sljLgZwJLHf3rp7JnzHu/hywtc3gVOv2AuBuD14EKsxsWM9Uuld7Nbv739y9Jep9Eajq6boOJMW6TuUC4H53b3T3lcAywvdMj+qoZjMz4FLgvreyjHwJiRHA2qT+anL8y9fMxgBHAy9Fg66LNtXvzLWmG8CBv5nZXDO7Jhp2iLtvgBB+wNCsVXdgl7Hvf6RcXteQet32ls/51YQtnoSxZvaymT1rZqdmq6gOtPd56A3r+lRgo7svTRrW6XWdLyFh7QzL2WN/zawf8BDwaXffDtwKjAemARsIm5C55GR3nw6cA/yHmb092wWly8yKgfOB30aDcn1ddyTnP+dm9iWgBfh1NGgDMMrdjwY+A9xrZv2zVV87Un0ecn5dA7PY98dPl9Z1voRENTAyqb8KWJ+lWjpkZkWEgPi1uz8M4O4b3b3V3ePAz8jCZm1H3H199LgJeIRQ38ZEU0f0uCl7FXboHGCeu2+E3F/XkVTrNqc/52b2IeDdwAc8aiSPmmu2RM/nEtr2J2Wvyn118HnI9XVdCFwE/CYxrKvrOl9CYjYw0czGRr8cLwMezXJN+4naEH8OLHL37yUNT25XvhB4re1rs8XM+ppZeeI5YQfla4T1+6Fosg8Bv89OhQe0z6+tXF7XSVKt20eBD0ZHOZ0AbEs0S2Wbmc0EPg+c7+67koZXmllB9HwcMBFYkZ0q99fB5+FR4DIzKzGzsYS6/9XT9XXgncAb7l6dGNDldd3Te+Oz1RGO/FhCSM8vZbueFDWeQthkfQWYH3XnAvcAr0bDHwWGZbvWpJrHEY7yWAC8nli3wGDgSWBp9Dgo27W2U3sZsAUYkDQsp9Y1IcA2AM2EX68fTrVuCU0gt0Sf8VeBGTlU8zJCG37ic31bNO3F0edmATAPOC/H1nXKzwPwpWhdLwbOyZWao+F3Ade2mbZL61qX5RARkZTypblJRES6QCEhIiIpKSRERCQlhYSIiKSkkBARkZQUEiIikpJCQiQNZjatzWWiz7duuuS8hUuUl3XHvES6m86TEEmDmV1JODntugzMe1U0782deE2Bu7d2dy0ibWlLQg4q0Y1VFpnZzyzcuOlvZlaaYtrxZvaX6Oq1z5vZYdHw95rZa2a2wMyeiy7lciPwvuhmLe8zsyvN7CfR9HeZ2a0Wbhi1wsxOi64YusjM7kpa3q1mNieq6/9Fwz4JDAeeNrOno2GzLNzE6TUz+07S6+vN7EYzewk40cy+bWYLoyuU/m9m1qjkvWydAq9OXSY6wo1VWoBpUf8DwOUppn0SmBg9Px54Knr+KjAiel4RPV4J/CTptXv6CZdAuJ9wWYwLgO3A2wg/wuYm1ZK4fEYB8AwwNepfRXTTJkJgrAEqgULgKeA90TgHLk3Mi3A5CEuuU5267u60JSEHo5XuPj96PpcQHPuILsd+EvDb6PaOPyXcGRDgH8BdZvZRwhd6Ov7g7k4ImI3u/qqHK4e+nrT8S81sHvAycATh7mZtHQs84+41Hm7S82vC3ccAWglXCIYQRLuBO8zsImDXfnMS6QaF2S5AJAMak563Au01N8WAOnef1naEu19rZscD/wbMN7P9pulgmfE2y48DhdGVQm8AjnX32qgZqk8782nvPgUJuz3aD+HuLWZ2HOGuepcB1wHvSKNOkU7RloTkJQ83c1ppZu+FcJl2Mzsqej7e3V9y968Amwn3DdhBuO94V/UHdgLbzOwQwn0sEpLn/RJwmpkNiS7rPAt4tu3Moi2hAe7+GPBpwk1xRLqdtiQkn30AuNXMvgwUEfYrLAD+x8wmEn7VPxkNWwN8IWqa+lZnF+TuC8zsZULz0wpCk1bC7cCfzWyDu59hZl8Eno6W/5i7t3cvjnLg92bWJ5ru+s7WJJIOHQIrIiIpqblJRERSUnOTHPTM7Bbg5DaDf+juv8hGPSK9iZqbREQkJTU3iYhISgoJERFJSSEhIiIpKSRERCSl/w+2oZ+JphUQWQAAAABJRU5ErkJggg==\n",
      "text/plain": [
       "<matplotlib.figure.Figure at 0x7ff28b7642e8>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "xgb2_3 = XGBClassifier(\n",
    "        learning_rate =0.1,\n",
    "        n_estimators=270,  #数值大没关系，cv会自动返回合适的n_estimators\n",
    "        max_depth=7,\n",
    "        min_child_weight=4,\n",
    "        gamma=0,\n",
    "        subsample=0.3,\n",
    "        colsample_bytree=0.8,\n",
    "        colsample_bylevel=0.7,\n",
    "        objective= 'multi:softprob',\n",
    "        seed=3)\n",
    "\n",
    "modelfit(xgb2_3, X_train, y_train, cv_folds = kfold)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## 经过第二轮调整，n_estimators也会改变"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 25,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "169"
      ]
     },
     "execution_count": 25,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "xgb2_3.n_estimators"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## 第四步：调整树的参数：subsample 和 colsample_bytree"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 27,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "{'colsample_bytree': [0.6, 0.7, 0.8, 0.9],\n",
       " 'subsample': [0.3, 0.4, 0.5, 0.6, 0.7, 0.8]}"
      ]
     },
     "execution_count": 27,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "subsample = [i/10.0 for i in range(3,9)]\n",
    "colsample_bytree = [i/10.0 for i in range(6,10)]\n",
    "param_test3_1 = dict(subsample=subsample, colsample_bytree=colsample_bytree)\n",
    "param_test3_1"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 28,
   "metadata": {},
   "outputs": [
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "/home/guanyu/.local/lib/python3.6/site-packages/sklearn/model_selection/_search.py:761: DeprecationWarning: The grid_scores_ attribute was deprecated in version 0.18 in favor of the more elaborate cv_results_ attribute. The grid_scores_ attribute will not be available from 0.20\n",
      "  DeprecationWarning)\n"
     ]
    },
    {
     "data": {
      "text/plain": [
       "([mean: -0.58926, std: 0.00347, params: {'colsample_bytree': 0.6, 'subsample': 0.3},\n",
       "  mean: -0.58685, std: 0.00399, params: {'colsample_bytree': 0.6, 'subsample': 0.4},\n",
       "  mean: -0.58456, std: 0.00338, params: {'colsample_bytree': 0.6, 'subsample': 0.5},\n",
       "  mean: -0.58344, std: 0.00351, params: {'colsample_bytree': 0.6, 'subsample': 0.6},\n",
       "  mean: -0.58232, std: 0.00392, params: {'colsample_bytree': 0.6, 'subsample': 0.7},\n",
       "  mean: -0.58200, std: 0.00338, params: {'colsample_bytree': 0.6, 'subsample': 0.8},\n",
       "  mean: -0.58879, std: 0.00412, params: {'colsample_bytree': 0.7, 'subsample': 0.3},\n",
       "  mean: -0.58672, std: 0.00330, params: {'colsample_bytree': 0.7, 'subsample': 0.4},\n",
       "  mean: -0.58393, std: 0.00422, params: {'colsample_bytree': 0.7, 'subsample': 0.5},\n",
       "  mean: -0.58310, std: 0.00298, params: {'colsample_bytree': 0.7, 'subsample': 0.6},\n",
       "  mean: -0.58207, std: 0.00389, params: {'colsample_bytree': 0.7, 'subsample': 0.7},\n",
       "  mean: -0.58154, std: 0.00348, params: {'colsample_bytree': 0.7, 'subsample': 0.8},\n",
       "  mean: -0.58856, std: 0.00347, params: {'colsample_bytree': 0.8, 'subsample': 0.3},\n",
       "  mean: -0.58603, std: 0.00395, params: {'colsample_bytree': 0.8, 'subsample': 0.4},\n",
       "  mean: -0.58397, std: 0.00391, params: {'colsample_bytree': 0.8, 'subsample': 0.5},\n",
       "  mean: -0.58282, std: 0.00367, params: {'colsample_bytree': 0.8, 'subsample': 0.6},\n",
       "  mean: -0.58236, std: 0.00354, params: {'colsample_bytree': 0.8, 'subsample': 0.7},\n",
       "  mean: -0.58124, std: 0.00373, params: {'colsample_bytree': 0.8, 'subsample': 0.8},\n",
       "  mean: -0.58932, std: 0.00310, params: {'colsample_bytree': 0.9, 'subsample': 0.3},\n",
       "  mean: -0.58515, std: 0.00397, params: {'colsample_bytree': 0.9, 'subsample': 0.4},\n",
       "  mean: -0.58326, std: 0.00430, params: {'colsample_bytree': 0.9, 'subsample': 0.5},\n",
       "  mean: -0.58302, std: 0.00368, params: {'colsample_bytree': 0.9, 'subsample': 0.6},\n",
       "  mean: -0.58230, std: 0.00350, params: {'colsample_bytree': 0.9, 'subsample': 0.7},\n",
       "  mean: -0.58101, std: 0.00338, params: {'colsample_bytree': 0.9, 'subsample': 0.8}],\n",
       " {'colsample_bytree': 0.9, 'subsample': 0.8},\n",
       " -0.5810135643991237)"
      ]
     },
     "execution_count": 28,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "xgb3_1 = XGBClassifier(\n",
    "        learning_rate =0.1,\n",
    "        n_estimators=169,  #第二轮参数调整得到的n_estimators最优值\n",
    "        max_depth=7,\n",
    "        min_child_weight=4,\n",
    "        gamma=0,\n",
    "        subsample=0.3,\n",
    "        colsample_bytree=0.8,\n",
    "        colsample_bylevel = 0.7,\n",
    "        objective= 'multi:softprob',\n",
    "        seed=3)\n",
    "\n",
    "\n",
    "gsearch3_1 = GridSearchCV(xgb3_1, param_grid = param_test3_1, scoring='neg_log_loss',n_jobs=-1, cv=kfold)\n",
    "gsearch3_1.fit(X_train , y_train)\n",
    "\n",
    "gsearch3_1.grid_scores_, gsearch3_1.best_params_,     gsearch3_1.best_score_"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 29,
   "metadata": {},
   "outputs": [
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "/home/guanyu/.local/lib/python3.6/site-packages/sklearn/utils/deprecation.py:122: FutureWarning: You are accessing a training score ('mean_train_score'), which will not be available by default any more in 0.21. If you need training scores, please set return_train_score=True\n",
      "  warnings.warn(*warn_args, **warn_kwargs)\n",
      "/home/guanyu/.local/lib/python3.6/site-packages/sklearn/utils/deprecation.py:122: FutureWarning: You are accessing a training score ('split0_train_score'), which will not be available by default any more in 0.21. If you need training scores, please set return_train_score=True\n",
      "  warnings.warn(*warn_args, **warn_kwargs)\n",
      "/home/guanyu/.local/lib/python3.6/site-packages/sklearn/utils/deprecation.py:122: FutureWarning: You are accessing a training score ('split1_train_score'), which will not be available by default any more in 0.21. If you need training scores, please set return_train_score=True\n",
      "  warnings.warn(*warn_args, **warn_kwargs)\n",
      "/home/guanyu/.local/lib/python3.6/site-packages/sklearn/utils/deprecation.py:122: FutureWarning: You are accessing a training score ('split2_train_score'), which will not be available by default any more in 0.21. If you need training scores, please set return_train_score=True\n",
      "  warnings.warn(*warn_args, **warn_kwargs)\n",
      "/home/guanyu/.local/lib/python3.6/site-packages/sklearn/utils/deprecation.py:122: FutureWarning: You are accessing a training score ('split3_train_score'), which will not be available by default any more in 0.21. If you need training scores, please set return_train_score=True\n",
      "  warnings.warn(*warn_args, **warn_kwargs)\n",
      "/home/guanyu/.local/lib/python3.6/site-packages/sklearn/utils/deprecation.py:122: FutureWarning: You are accessing a training score ('split4_train_score'), which will not be available by default any more in 0.21. If you need training scores, please set return_train_score=True\n",
      "  warnings.warn(*warn_args, **warn_kwargs)\n",
      "/home/guanyu/.local/lib/python3.6/site-packages/sklearn/utils/deprecation.py:122: FutureWarning: You are accessing a training score ('std_train_score'), which will not be available by default any more in 0.21. If you need training scores, please set return_train_score=True\n",
      "  warnings.warn(*warn_args, **warn_kwargs)\n"
     ]
    },
    {
     "data": {
      "text/plain": [
       "{'mean_fit_time': array([148.52313938, 165.86072726, 178.7057126 , 176.98676524,\n",
       "        168.93080626, 162.28611693, 165.06358972, 186.6321207 ,\n",
       "        203.02567077, 201.83252473, 191.71568141, 187.70497122,\n",
       "        183.52090945, 210.17401261, 227.23583107, 223.77604899,\n",
       "        222.25181952, 206.82748475, 201.99086037, 229.95491047,\n",
       "        248.14342785, 241.6986423 , 232.27974839, 221.63564086]),\n",
       " 'mean_score_time': array([1.01054668, 0.79741015, 0.81757803, 0.7988112 , 0.80033631,\n",
       "        0.8134429 , 0.80631862, 0.81429725, 0.80666027, 0.81364875,\n",
       "        0.82046232, 0.84753032, 0.83270831, 0.83932657, 0.84750414,\n",
       "        0.82329955, 0.81329975, 0.82664175, 0.82169471, 0.83341346,\n",
       "        0.82948141, 0.83342829, 0.8420114 , 0.83253493]),\n",
       " 'mean_test_score': array([-0.58926312, -0.58684773, -0.5845611 , -0.58343673, -0.58231834,\n",
       "        -0.58199802, -0.58878979, -0.58672296, -0.58393073, -0.58309985,\n",
       "        -0.58207052, -0.5815438 , -0.58856149, -0.5860303 , -0.58397109,\n",
       "        -0.58281994, -0.58236436, -0.58123559, -0.58931554, -0.58515404,\n",
       "        -0.58326257, -0.58301671, -0.58229805, -0.58101356]),\n",
       " 'mean_train_score': array([-0.4735178 , -0.4651179 , -0.46001176, -0.45594583, -0.45343571,\n",
       "        -0.45288241, -0.46986478, -0.46189006, -0.4560308 , -0.45280728,\n",
       "        -0.45066748, -0.45009472, -0.46613902, -0.45827464, -0.45183101,\n",
       "        -0.44874557, -0.44674525, -0.44757965, -0.46399162, -0.45436901,\n",
       "        -0.448682  , -0.44520604, -0.44470043, -0.44454585]),\n",
       " 'param_colsample_bytree': masked_array(data=[0.6, 0.6, 0.6, 0.6, 0.6, 0.6, 0.7, 0.7, 0.7, 0.7, 0.7,\n",
       "                    0.7, 0.8, 0.8, 0.8, 0.8, 0.8, 0.8, 0.9, 0.9, 0.9, 0.9,\n",
       "                    0.9, 0.9],\n",
       "              mask=[False, False, False, False, False, False, False, False,\n",
       "                    False, False, False, False, False, False, False, False,\n",
       "                    False, False, False, False, False, False, False, False],\n",
       "        fill_value='?',\n",
       "             dtype=object),\n",
       " 'param_subsample': masked_array(data=[0.3, 0.4, 0.5, 0.6, 0.7, 0.8, 0.3, 0.4, 0.5, 0.6, 0.7,\n",
       "                    0.8, 0.3, 0.4, 0.5, 0.6, 0.7, 0.8, 0.3, 0.4, 0.5, 0.6,\n",
       "                    0.7, 0.8],\n",
       "              mask=[False, False, False, False, False, False, False, False,\n",
       "                    False, False, False, False, False, False, False, False,\n",
       "                    False, False, False, False, False, False, False, False],\n",
       "        fill_value='?',\n",
       "             dtype=object),\n",
       " 'params': [{'colsample_bytree': 0.6, 'subsample': 0.3},\n",
       "  {'colsample_bytree': 0.6, 'subsample': 0.4},\n",
       "  {'colsample_bytree': 0.6, 'subsample': 0.5},\n",
       "  {'colsample_bytree': 0.6, 'subsample': 0.6},\n",
       "  {'colsample_bytree': 0.6, 'subsample': 0.7},\n",
       "  {'colsample_bytree': 0.6, 'subsample': 0.8},\n",
       "  {'colsample_bytree': 0.7, 'subsample': 0.3},\n",
       "  {'colsample_bytree': 0.7, 'subsample': 0.4},\n",
       "  {'colsample_bytree': 0.7, 'subsample': 0.5},\n",
       "  {'colsample_bytree': 0.7, 'subsample': 0.6},\n",
       "  {'colsample_bytree': 0.7, 'subsample': 0.7},\n",
       "  {'colsample_bytree': 0.7, 'subsample': 0.8},\n",
       "  {'colsample_bytree': 0.8, 'subsample': 0.3},\n",
       "  {'colsample_bytree': 0.8, 'subsample': 0.4},\n",
       "  {'colsample_bytree': 0.8, 'subsample': 0.5},\n",
       "  {'colsample_bytree': 0.8, 'subsample': 0.6},\n",
       "  {'colsample_bytree': 0.8, 'subsample': 0.7},\n",
       "  {'colsample_bytree': 0.8, 'subsample': 0.8},\n",
       "  {'colsample_bytree': 0.9, 'subsample': 0.3},\n",
       "  {'colsample_bytree': 0.9, 'subsample': 0.4},\n",
       "  {'colsample_bytree': 0.9, 'subsample': 0.5},\n",
       "  {'colsample_bytree': 0.9, 'subsample': 0.6},\n",
       "  {'colsample_bytree': 0.9, 'subsample': 0.7},\n",
       "  {'colsample_bytree': 0.9, 'subsample': 0.8}],\n",
       " 'rank_test_score': array([23, 20, 16, 13,  7,  4, 22, 19, 14, 11,  5,  3, 21, 18, 15,  9,  8,\n",
       "         2, 24, 17, 12, 10,  6,  1], dtype=int32),\n",
       " 'split0_test_score': array([-0.58492049, -0.57995092, -0.57907216, -0.57774188, -0.57605408,\n",
       "        -0.57633605, -0.58108688, -0.58186339, -0.57722536, -0.57896544,\n",
       "        -0.57703073, -0.57677822, -0.58291437, -0.58074682, -0.57703585,\n",
       "        -0.57673092, -0.57764805, -0.57536187, -0.58479812, -0.57878934,\n",
       "        -0.57634504, -0.57701723, -0.57749752, -0.57532146]),\n",
       " 'split0_train_score': array([-0.473637  , -0.46379087, -0.4620182 , -0.45634713, -0.45522808,\n",
       "        -0.45196055, -0.47202875, -0.46163897, -0.45790109, -0.45426915,\n",
       "        -0.4502407 , -0.45052452, -0.46917758, -0.45935043, -0.45428528,\n",
       "        -0.45097592, -0.44927116, -0.44955116, -0.46685835, -0.45562839,\n",
       "        -0.45063391, -0.44581801, -0.44341402, -0.44747347]),\n",
       " 'split1_test_score': array([-0.58824549, -0.58657757, -0.58237676, -0.58124074, -0.57983328,\n",
       "        -0.58023378, -0.58848175, -0.58425004, -0.58139706, -0.5823453 ,\n",
       "        -0.5807229 , -0.5785314 , -0.58688446, -0.58339085, -0.58334209,\n",
       "        -0.58123375, -0.57963444, -0.57970557, -0.58662027, -0.58416845,\n",
       "        -0.58226554, -0.58179843, -0.58024751, -0.5801689 ]),\n",
       " 'split1_train_score': array([-0.47344931, -0.46440761, -0.4596946 , -0.45699482, -0.45313802,\n",
       "        -0.45239035, -0.46914919, -0.46277145, -0.4544901 , -0.45289589,\n",
       "        -0.44963669, -0.44772594, -0.46533563, -0.4591697 , -0.45340375,\n",
       "        -0.44863096, -0.44701264, -0.44677932, -0.46511817, -0.45533911,\n",
       "        -0.44870789, -0.44377578, -0.44531183, -0.4440786 ]),\n",
       " 'split2_test_score': array([-0.58681015, -0.58609673, -0.58655232, -0.58488712, -0.58339075,\n",
       "        -0.58296705, -0.59076814, -0.587068  , -0.58468577, -0.5814805 ,\n",
       "        -0.5802238 , -0.58184582, -0.59051994, -0.5865376 , -0.58460704,\n",
       "        -0.58327188, -0.58222662, -0.58094763, -0.59113455, -0.58402833,\n",
       "        -0.58258053, -0.58251229, -0.58107973, -0.58082995]),\n",
       " 'split2_train_score': array([-0.47345393, -0.46625455, -0.46076644, -0.45542501, -0.4516617 ,\n",
       "        -0.45340496, -0.46833539, -0.46269685, -0.45746066, -0.45247843,\n",
       "        -0.45114462, -0.450935  , -0.46619219, -0.45975939, -0.45201301,\n",
       "        -0.44802018, -0.44630137, -0.44679303, -0.46413346, -0.45482846,\n",
       "        -0.44810003, -0.44300604, -0.44319552, -0.44405066]),\n",
       " 'split3_test_score': array([-0.59181374, -0.59084925, -0.58639135, -0.58575408, -0.58560511,\n",
       "        -0.58496314, -0.59047975, -0.58998169, -0.5873739 , -0.58516176,\n",
       "        -0.58381411, -0.58475726, -0.58935535, -0.58697242, -0.5861196 ,\n",
       "        -0.58563159, -0.5847142 , -0.58383488, -0.59091945, -0.58958516,\n",
       "        -0.5857787 , -0.58650674, -0.58626227, -0.58351012]),\n",
       " 'split3_train_score': array([-0.47276526, -0.46537683, -0.45971131, -0.45580837, -0.45422983,\n",
       "        -0.45523103, -0.47050915, -0.46208957, -0.45460517, -0.45256032,\n",
       "        -0.45138396, -0.45099207, -0.46584854, -0.45689958, -0.45014994,\n",
       "        -0.44827903, -0.44653064, -0.44800052, -0.46255095, -0.45410427,\n",
       "        -0.44931071, -0.44991631, -0.44766752, -0.44454039]),\n",
       " 'split4_test_score': array([-0.59452734, -0.5907654 , -0.58841406, -0.58756106, -0.58670982,\n",
       "        -0.58549114, -0.59313376, -0.59045282, -0.58897309, -0.58754761,\n",
       "        -0.58856304, -0.58580758, -0.59313472, -0.59250577, -0.58875232,\n",
       "        -0.5872329 , -0.58760008, -0.58632957, -0.59310646, -0.58920012,\n",
       "        -0.58934488, -0.58725013, -0.58640447, -0.58523867]),\n",
       " 'split4_train_score': array([-0.47428348, -0.46575961, -0.45786823, -0.45515383, -0.45292089,\n",
       "        -0.45142517, -0.46930142, -0.46025345, -0.45569697, -0.45183259,\n",
       "        -0.45093141, -0.45029606, -0.46414115, -0.45619412, -0.44930304,\n",
       "        -0.44782175, -0.44461044, -0.44677424, -0.46129715, -0.45194481,\n",
       "        -0.44665743, -0.44351406, -0.44391326, -0.44258612]),\n",
       " 'std_fit_time': array([5.4302069 , 0.38497188, 0.38887121, 0.72441846, 0.87698236,\n",
       "        0.88492317, 0.89169014, 1.16031657, 1.45736728, 3.0346879 ,\n",
       "        2.16129744, 2.98957725, 1.43469801, 1.20717981, 2.03995592,\n",
       "        2.34004135, 8.54578537, 1.6113259 , 1.24562039, 1.03887721,\n",
       "        1.51486334, 1.42348721, 2.10058307, 1.89231716]),\n",
       " 'std_score_time': array([0.40986374, 0.01511121, 0.02834598, 0.00714583, 0.02335067,\n",
       "        0.03480191, 0.0189202 , 0.01302529, 0.01606343, 0.01222426,\n",
       "        0.01923889, 0.03946789, 0.014772  , 0.03398978, 0.03787977,\n",
       "        0.0173696 , 0.01705913, 0.00921163, 0.01809931, 0.01657789,\n",
       "        0.00885095, 0.02068307, 0.05117743, 0.04298494]),\n",
       " 'std_test_score': array([0.00346768, 0.00398907, 0.00337813, 0.00351386, 0.00391544,\n",
       "        0.00337944, 0.00412478, 0.00329788, 0.00422445, 0.0029771 ,\n",
       "        0.00389386, 0.00347508, 0.00346641, 0.00394843, 0.00390824,\n",
       "        0.00366535, 0.00353963, 0.00373164, 0.00309588, 0.00396871,\n",
       "        0.00430421, 0.00368329, 0.00350173, 0.00338318]),\n",
       " 'std_train_score': array([0.00048488, 0.00089848, 0.00136974, 0.00066013, 0.00121194,\n",
       "        0.00134198, 0.00128581, 0.00091751, 0.00141846, 0.00080797,\n",
       "        0.00064114, 0.00121224, 0.00167075, 0.00144099, 0.00188397,\n",
       "        0.0011476 , 0.00150015, 0.00109288, 0.00194129, 0.00131796,\n",
       "        0.0013148 , 0.00254203, 0.0016563 , 0.00160468])}"
      ]
     },
     "execution_count": 29,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "gsearch3_1.cv_results_"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 30,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Best: -0.581014 using {'colsample_bytree': 0.9, 'subsample': 0.8}\n"
     ]
    },
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "/home/guanyu/.local/lib/python3.6/site-packages/sklearn/utils/deprecation.py:122: FutureWarning: You are accessing a training score ('mean_train_score'), which will not be available by default any more in 0.21. If you need training scores, please set return_train_score=True\n",
      "  warnings.warn(*warn_args, **warn_kwargs)\n",
      "/home/guanyu/.local/lib/python3.6/site-packages/sklearn/utils/deprecation.py:122: FutureWarning: You are accessing a training score ('std_train_score'), which will not be available by default any more in 0.21. If you need training scores, please set return_train_score=True\n",
      "  warnings.warn(*warn_args, **warn_kwargs)\n",
      "/home/guanyu/.local/lib/python3.6/site-packages/sklearn/utils/deprecation.py:122: FutureWarning: You are accessing a training score ('split0_train_score'), which will not be available by default any more in 0.21. If you need training scores, please set return_train_score=True\n",
      "  warnings.warn(*warn_args, **warn_kwargs)\n",
      "/home/guanyu/.local/lib/python3.6/site-packages/sklearn/utils/deprecation.py:122: FutureWarning: You are accessing a training score ('split1_train_score'), which will not be available by default any more in 0.21. If you need training scores, please set return_train_score=True\n",
      "  warnings.warn(*warn_args, **warn_kwargs)\n",
      "/home/guanyu/.local/lib/python3.6/site-packages/sklearn/utils/deprecation.py:122: FutureWarning: You are accessing a training score ('split2_train_score'), which will not be available by default any more in 0.21. If you need training scores, please set return_train_score=True\n",
      "  warnings.warn(*warn_args, **warn_kwargs)\n",
      "/home/guanyu/.local/lib/python3.6/site-packages/sklearn/utils/deprecation.py:122: FutureWarning: You are accessing a training score ('split3_train_score'), which will not be available by default any more in 0.21. If you need training scores, please set return_train_score=True\n",
      "  warnings.warn(*warn_args, **warn_kwargs)\n",
      "/home/guanyu/.local/lib/python3.6/site-packages/sklearn/utils/deprecation.py:122: FutureWarning: You are accessing a training score ('split4_train_score'), which will not be available by default any more in 0.21. If you need training scores, please set return_train_score=True\n",
      "  warnings.warn(*warn_args, **warn_kwargs)\n"
     ]
    },
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<matplotlib.figure.Figure at 0x7ff28b555898>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "print(\"Best: %f using %s\" % (gsearch3_1.best_score_, gsearch3_1.best_params_))\n",
    "test_means = gsearch3_1.cv_results_[ 'mean_test_score' ]\n",
    "test_stds = gsearch3_1.cv_results_[ 'std_test_score' ]\n",
    "train_means = gsearch3_1.cv_results_[ 'mean_train_score' ]\n",
    "train_stds = gsearch3_1.cv_results_[ 'std_train_score' ]\n",
    "\n",
    "pd.DataFrame(gsearch3_1.cv_results_).to_csv('my_preds_subsampleh_colsample_bytree_1.csv')\n",
    "\n",
    "# plot results\n",
    "test_scores = np.array(test_means).reshape(len(colsample_bytree), len(subsample))\n",
    "train_scores = np.array(train_means).reshape(len(colsample_bytree), len(subsample))\n",
    "\n",
    "for i, value in enumerate(colsample_bytree):\n",
    "    pyplot.plot(subsample, -test_scores[i], label= 'test_colsample_bytree:'   + str(value))\n",
    "#for i, value in enumerate(min_child_weight):\n",
    "#    pyplot.plot(max_depth, train_scores[i], label= 'train_min_child_weight:'   + str(value))\n",
    "    \n",
    "pyplot.legend()\n",
    "pyplot.xlabel( 'subsample' )                                                                                                      \n",
    "pyplot.ylabel( 'Log Loss' )\n",
    "pyplot.savefig( 'subsample_vs_colsample_bytree1.png' )"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## 调整之后的subsample为0.8,bytree：0.9"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## 第五步：调整正则化参数：reg_alpha 和reg_lambda"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 31,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "{'reg_alpha': [1.5, 2], 'reg_lambda': [0.5, 1, 2]}"
      ]
     },
     "execution_count": 31,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "reg_alpha = [ 1.5, 2]    #default = 0, 测试0.1,1，1.5，2\n",
    "reg_lambda = [0.5, 1, 2]      #default = 1，测试0.1， 0.5， 1，2\n",
    "\n",
    "param_test5_1 = dict(reg_alpha=reg_alpha, reg_lambda=reg_lambda)\n",
    "param_test5_1"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 32,
   "metadata": {},
   "outputs": [
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "/home/guanyu/.local/lib/python3.6/site-packages/sklearn/model_selection/_search.py:761: DeprecationWarning: The grid_scores_ attribute was deprecated in version 0.18 in favor of the more elaborate cv_results_ attribute. The grid_scores_ attribute will not be available from 0.20\n",
      "  DeprecationWarning)\n"
     ]
    },
    {
     "data": {
      "text/plain": [
       "([mean: -0.58092, std: 0.00355, params: {'reg_alpha': 1.5, 'reg_lambda': 0.5},\n",
       "  mean: -0.58091, std: 0.00366, params: {'reg_alpha': 1.5, 'reg_lambda': 1},\n",
       "  mean: -0.58073, std: 0.00356, params: {'reg_alpha': 1.5, 'reg_lambda': 2},\n",
       "  mean: -0.58128, std: 0.00365, params: {'reg_alpha': 2, 'reg_lambda': 0.5},\n",
       "  mean: -0.58070, std: 0.00339, params: {'reg_alpha': 2, 'reg_lambda': 1},\n",
       "  mean: -0.58114, std: 0.00373, params: {'reg_alpha': 2, 'reg_lambda': 2}],\n",
       " {'reg_alpha': 2, 'reg_lambda': 1},\n",
       " -0.580697312309997)"
      ]
     },
     "execution_count": 32,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "xgb5_1 = XGBClassifier(\n",
    "        learning_rate =0.1,\n",
    "        n_estimators=169,  #第二轮参数调整得到的n_estimators最优值\n",
    "        max_depth=7,\n",
    "        min_child_weight=4,\n",
    "        gamma=0,\n",
    "        subsample=0.8,\n",
    "        colsample_bytree=0.9,\n",
    "        colsample_bylevel = 0.7,\n",
    "        objective= 'multi:softprob',\n",
    "        seed=3)\n",
    "\n",
    "\n",
    "gsearch5_1 = GridSearchCV(xgb5_1, param_grid = param_test5_1, scoring='neg_log_loss',n_jobs=-1, cv=kfold)\n",
    "gsearch5_1.fit(X_train , y_train)\n",
    "\n",
    "gsearch5_1.grid_scores_, gsearch5_1.best_params_,     gsearch5_1.best_score_"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## 其实应该继续向右探索alpha，然后lambda也应该继续在1附近细分，但是这里用了太长时间fit模型（合计超过16小时），所以就先这样吧"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## 尝试进行预测"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 37,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "[2 2 2 ... 2 1 2]\n"
     ]
    },
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "/home/guanyu/.local/lib/python3.6/site-packages/sklearn/preprocessing/label.py:151: DeprecationWarning: The truth value of an empty array is ambiguous. Returning False, but in future this will result in an error. Use `array.size > 0` to check that an array is not empty.\n",
      "  if diff:\n"
     ]
    }
   ],
   "source": [
    "data1 = pd.read_csv(\"RentListingInquries_FE_test.csv\")\n",
    "x = np.array(data1)\n",
    "y_test = gsearch5_1.predict(x)\n",
    "print (y_test)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## 生成结果文件"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 38,
   "metadata": {},
   "outputs": [],
   "source": [
    "pd.DataFrame(y_test).to_csv('my_preds.csv')"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": []
  }
 ],
 "metadata": {
  "kernelspec": {
   "display_name": "Python 3",
   "language": "python",
   "name": "python3"
  },
  "language_info": {
   "codemirror_mode": {
    "name": "ipython",
    "version": 3
   },
   "file_extension": ".py",
   "mimetype": "text/x-python",
   "name": "python",
   "nbconvert_exporter": "python",
   "pygments_lexer": "ipython3",
   "version": "3.6.4"
  }
 },
 "nbformat": 4,
 "nbformat_minor": 2
}
